Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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(); }_Java_Android_Sockets_Udp - Fatal编程技术网

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(); }

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(); },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 如果你使用真实设备,也要

我没有收到消息:S


注意:我的电脑上有一个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).