Java 什么';我的UDP客户端(android)有什么问题? final int SERVERPORT=5902; 字符串SERVERIP=“heretheipfmypc”//我已尝试使用“127.0.0.1”、“10.0.2.2”和我的本地IP CharSequence tosend=“probandoooooo”; 试一试{ DatagramSocket s=新的DatagramSocket(); InetAddress local=InetAddress.getByName(服务器IP); byte[]message=tosend.toString().getBytes(); DatagramPacket p=新的DatagramPacket(message,message.length,local,SERVERPORT); s、 发送(p); s、 close(); }捕获(例外e){ e、 printStackTrace(); }
我没有收到消息:SJava 什么';我的UDP客户端(android)有什么问题? final int SERVERPORT=5902; 字符串SERVERIP=“heretheipfmypc”//我已尝试使用“127.0.0.1”、“10.0.2.2”和我的本地IP CharSequence tosend=“probandoooooo”; 试一试{ DatagramSocket s=新的DatagramSocket(); InetAddress local=InetAddress.getByName(服务器IP); byte[]message=tosend.toString().getBytes(); DatagramPacket p=新的DatagramPacket(message,message.length,local,SERVERPORT); s、 发送(p); s、 close(); }捕获(例外e){ e、 printStackTrace(); },java,android,sockets,udp,Java,Android,Sockets,Udp,我没有收到消息:S 注意:我的电脑上有一个UDP服务器,我在一台设备上试用该应用程序。如果删除close()调用,数据报是否会到达 如果是这样,您希望查看so_LINGER套接字选项,以便套接字在仍有数据报要处理时仍能继续运行。我认为您应该在emulator中测试应用程序,如果在这种情况下让我们检查一下的话 您必须将端口从本地实际pc端口转发到虚拟仿真器端口 您不能通过本地主机或127.0.0.1 IP从emulator访问PC,您必须使用连接到LAN的实际PC IP 如果你使用真实设备,也要
注意:我的电脑上有一个UDP服务器,我在一台设备上试用该应用程序。如果删除close()调用,数据报是否会到达
如果是这样,您希望查看so_LINGER套接字选项,以便套接字在仍有数据报要处理时仍能继续运行。我认为您应该在emulator中测试应用程序,如果在这种情况下让我们检查一下的话 您必须将端口从本地实际pc端口转发到虚拟仿真器端口 您不能通过本地主机或127.0.0.1 IP从emulator访问PC,您必须使用连接到LAN的实际PC IP 如果你使用真实设备,也要检查你的设备是否通过特定的ip到达你的电脑 如果你尝试通过局域网,它会工作。如果你在广域网环境下尝试,它将不起作用
final int SERVERPORT = 5902;
String SERVERIP = "HereTheIPOfMyPC"; //I have tried with "127.0.0.1", "10.0.2.2" and my local IP
CharSequence tosend = "Probandooooooooooo";
try {
DatagramSocket s = new DatagramSocket();
InetAddress local = InetAddress.getByName(SERVERIP);
byte[] message = tosend.toString().getBytes();
DatagramPacket p = new DatagramPacket(message,message.length, local, SERVERPORT);
s.send(p);
s.close();
} catch (Exception e) {
e.printStackTrace();
}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
我不明白你在用地址做什么。如果服务器和客户端位于不同的框中,“127.0.0.1”,即localhost,肯定无法正常工作。还有,我应该说什么?您必须使用服务器实际正在侦听的网络可访问IP。另外,请自行调用
tosend.toString().getBytes()
,然后将msg_length
设置为byte[]的长度
array。不要调用tosend.toString()
两次,并将msg_length
设置为字符串的长度,该长度可能不同于字节[]
的长度,具体取决于使用的字符。请记住,Java字符串是UTF-16编码的,但是getBytes()
不会返回UTF-16编码的byte[]
数组,除非您明确要求它(您不是)。好的,我更改了它,但仍然无法工作:S
(Check NAT for more Details).