首先声明是UDP通讯不是TCP!现在的情况是,PC机做Server,通过Android模拟器的Client可以正常发送数据到PC机的Server,PC机的Server也可以接收到数据(说明:IP地址为192.168.0.21 端口为4510)问题来了!!!!!!现在就是跟上面反过来,用Android模拟器做Server,PC机做Client,PC机Client怎么发送数据,Android模拟器Server都接收不到数据,也没有任何异常,PC机Client连接的IP地址为127.0.0.1(说明:192.168.0.21,10.0.2.15这两个IP地址都试过也不行),端口是4520
各位高手看看是什么原因,本人初学Android
各位高手看看是什么原因,本人初学Android
UDP跟TCP应该没什么区别吧,UDP都连不了估计TCP也是不行的,这两样东西本来就没什么本质的区别,我现在怀疑是不是Android模拟器的IP地址不对,我在网上找了些资料,有些说Android模拟器的IP地址为127.0.0.1,有些说是10.0.2.2,但我用代码获取出来的IP地址是10.0.2.15,可这几个IP都试过,还是不行。
我现在是模拟器可以访问PC机,是PC机访问不了模拟器!
没有任何错,也没有任何异常,就是PC机发送UDP数据,Android接收不到,什么IP地址我都试过了127.0.0.1、192.168.0.21(本机IP地址)、localhost、10.0.2.2、10.0.2.15这些都试过了,都不行。
现在是单向的可以,所谓单向就是Android的UDP发送Socket发送数据后马上监听,就可以接收到PC机发送过来的数据,因为这个Socket与PC机建立关联成功后,它们是可以互发送数据的,但是要是有另一个Socket来监听PC机发送的数据就是接收不到,也就是说Android不能作为UDP服务器,只能作为发送端。
/* 发送函数 */
private void sendData()
{
String senddata = "服务器返回数据!";
try {
this.dsclient.send(new DatagramPacket(
buf, buf.lenght,
InetAddress.getByName("192.168.0.21"),
4510));
} catch (IOException ex){
ex.printStackTrace();
}
}
/* 接收函数 */
public String recvData(){
try
{
String data = "";
this.dsserver = new DatagramSocket(4520);
this.dsserver.receive(this.dpserver);
data = new String(this.dpserver.getData);
sendData();
return data.trim();
} catch (IOException ex) {
ex.printStackTrace();
}
}
Android端代码:
/* 发送数据 */
public String SendData()
{
String data="xxxxxxx";
try {
this.packet.setAddress(InetAddress.getByName("192.168.0.21"));
this.packet.setPort(4520);
this.dsclient.send(this.packet);
} catch (IOException ex){
ex.printStackTrace();
}
return data;
}/* 接收数据 */
public String recvData()
{
String data = "ccccc";
try {
this.dsserver = new DatagramSocket(4510); DatagramPacket packet = new DatagramPacket(this.buf, this.buflength);
this.dsserver.receive(packet);
data = new String(packet.getData());
return data.trim();
} catch (IOException ex) {
ex.printStackTrace();
}
return data.trim();
}
以上的代码,4520那个端口是可以正常接收到数据的,4510那个端口就是接收不到数据。
如果网络权限没有加上,那么Android模拟器应该不能发送到PC机的吧!
请问一下模拟器的IP是多少,我本朵的IP地址是192.168.0.21
是不是因为模拟器没有IP地址所以收不到
PC Client在连接Dev Server前需要一个端口重定向的过程~ 参考一下我发的帖子,兴许有点用.(http://topic.csdn.net/u/20100127/17/032d0388-cca1-4551-8c2b-927be59fcf20.html)
那篇文章我也看过了的,也重定向过了,但是还是没用,一样收不到数据!
同时,请教楼主,我查到的模拟器IP为0,是啥回事啊?模拟器上的wifi包不能使用,是不是这个原因?
使用telnet 连上模拟器,
使用重定向,使用redirect命令 将模拟器监听的端口和PC发送的目标端口绑定,
应该就没有问题了
我的pc发送到7100,模拟器用6100接收,重定向redir add udp:7100:6100
我这不光接收不到,还有异常……
socket=new DatagramSocket(6100);模拟器上这句话抛出异常,permission denied,maybe missing internet permission……
哪位大侠帮帮忙~
多谢各位的参与
由于这段时间比较忙没空上来
此问题已解决
用UDP不管是真机还是模拟器,再怎么端口定向,再怎么加权限都是不行的
现用TCP一切正常
可能是Android不支持UDP吧!!!!
没道理!!
关注!
我也遇到同样的问题 pc做server,手机做client,现在是手机接收不到数据啊
我用软件监听手机流量 手机还是收到了 能达到5MB 用的wlan
有什么好的解决方案嘛?
android模拟器作为服务器端接收来自PC的UDP数据包,
需要在模拟器上做端口映射,用的命令跟TCP的时候有些不同
redir add udp:8000:9000
这样做了之后就可以收到UDP的包了!
我现在TCP不灵啊,求解决方法! 用本机做client,模拟器做server可以连接,地址用127.0.0.1。但是用其他的机器来连接就不成啊!求解!