android模拟器与pc,模拟器与模拟之间用socket进行通讯和得到模拟器ip地址程序

在本机上启动两个模拟器,本机(PC)和模拟器的信息以下:服务器

        你们能够看到,两个模拟器的IP地址都是彻底同样的,因此要实现两个模拟器之间的通讯,使用模拟器的IP地址是办不到的。网络

        获取模拟器名称:socket

        >adb devicestcp

        List of devices attachedspa

        emulator-5554 device调试

        emulator-5556 deviceserver

        模拟器提供了一个特殊的IP,此IP的地址为10.0.2.2,此IP地址能够说等同于PC本机的IP地址127.0.0.1 。因此,经过此特殊IP地址,实现PC本机与模拟器的通讯是没有问题。blog

 

【PC-SERVER / 模拟器-CLIENT】it

        目的:经过7100端口跟服务器进行通讯。后台

        实施方法比较简单,直接按照下面的方法就能够了。

 

        方法1:

        PC-SERVER:ServerSocket server = new ServerSocket(7100);

        模拟器-CLIENT:Socket socket = new Socket("192.168.1.3", 7100);

        方法2:

        PC-SERVER:ServerSocket server = new ServerSocket(7100);

        模拟器-CLIENT:Socket socket = new Socket("10.0.2.2", 7100);

 

【模拟器-SERVER / PC-CLIENT】

        目的:链接到服务器的7100端口。

        实施操做稍微复杂一些,不能按照前面的方法来进行。要达到此目的,先要进行端口映射。

        把本机端口TCP/6100映射到模拟器TCP/7100端口(UDP也是同样)。

        >adb –s emulator-5554 forward tcp:6100 tcp:7100

        端口映射成功后,再进行下面的实验。

 

        方法1(正确):

        模拟器-SERVER:ServerSocket server = new ServerSocket(7100);

        PC-CLIENT:Socket socket = new Socket("127.0.0.1", 6100);

 

        方法2(错误):

        模拟器-SERVER:ServerSocket server = new ServerSocket(7100);

        PC-CLIENT:Socket socket = new Socket("192.168.1.3", 6100);

 

        错误缘由是127.0.0.1是本机环路IP,跟本机IP没有映射关系,因此发送到本机IP的链接请求,没法映射到127.0.0.1的环路IP上。

        因为这个缘由,两台PC机上的模拟器之间,是没法进行网络链接的。若是要实现链接,只能在做为服务器的PC上,运行一个用于数据中继的后台程序,进行数据的转发。

 

【模拟器(5554)-SERVER / 模拟器(5556)-CLIENT】

        目的:模拟器(5556)链接到模拟器(5554)的7100端口。

        实施操做也相对复杂一些。要达到此目的,也要先进行端口映射。

        把本机端口TCP/6100映射到模拟器(5554)TCP/7100端口(UDP也是同样)。

        >adb –s emulator-5554 forward tcp:6100 tcp:7100

        端口映射成功后,再进行下面的实验。

 

        方法1(正确):

        模拟器(5554)-SERVER:ServerSocket server = new ServerSocket(7100);

        模拟器(5556)-CLIENT:Socket socket = new Socket("10.0.2.2", 6100);

 

原理说明:

        模拟器(5556)经过链接10.0.2.2:6100,至关于链接本机(PC)的127.0.0.1:6100,因为本机IP的6100端口进行过端口 映射,映射到模拟器(5554)的7100端口。因此,来自模拟器(5556)的链接请求会发送到模拟器(5554)上。实现了两个模拟器之间的网络通讯 功能。

        此方法在本机调试时很是有用。

 

        方法2(错误):

        模拟器(5554)-SERVER:ServerSocket server = new ServerSocket(7100);

        模拟器(5556)-CLIENT:Socket socket = new Socket("192.168.1.3", 6100);

 

        错误缘由跟【PC-CLIENT / 模拟器-SERVER】的方法2同样。

转自:http://japankn.iteye.com/blog/1744031

相关文章
相关标签/搜索