android套接字可以在模拟器上工作,但不能在真实设备上工作

android套接字可以在模拟器上工作,但不能在真实设备上工作,android,sockets,networking,emulation,Android,Sockets,Networking,Emulation,我正在尝试运行应用程序向服务器发送udp数据包。它可以在模拟器上完美运行,但不能在物理设备上运行。我已检查可能的答案(互联网权限)。但是,在我的情况下,我已经提供了权限,但它仍然不起作用。感谢您的帮助 应用程序代码: 导入android.os.Message; 导入android.util.Log; 导入java.io.IOException; 导入java.net.DatagramPacket; 导入java.net.DatagramSocket; 导入java.net.InetAddres

我正在尝试运行应用程序向服务器发送udp数据包。它可以在模拟器上完美运行,但不能在物理设备上运行。我已检查可能的答案(互联网权限)。但是,在我的情况下,我已经提供了权限,但它仍然不起作用。感谢您的帮助

应用程序代码:

导入android.os.Message;
导入android.util.Log;
导入java.io.IOException;
导入java.net.DatagramPacket;
导入java.net.DatagramSocket;
导入java.net.InetAddress;
导入java.net.SocketException;
导入java.net.UnknownHostException;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Message;
导入android.util.Log;
导入android.widget.Toast;
导入android.os.Handler;
公共类UdpClientThread扩展线程{
字符串地址;
国际数据传输端口;
私有布尔运行;
MainActivity.UdpClientHandler处理程序;
DatagramSocket套接字;
地址;
公共UdpClientThread(字符串地址、int端口、MainActivity.UdpClientHandler处理程序){
超级();
dstAddress=addr;
dstPort=端口;
this.handler=handler;
}
公共void setRunning(布尔运行){
这就是跑步;
}
私有void发送状态(字符串状态){
handler.sendMessage(
获取(处理程序,
MainActivity.UdpClientHandler.UPDATE_STATE,STATE));
}
@凌驾
公开募捐{
sendState(“连接…”);
运行=真;
试一试{
套接字=新的DatagramSocket();
address=InetAddress.getByName(dstAddress);
//发送请求
字节[]buf=新字节[256];
数据包=
新数据包(buf,buf.length,address,dstPort);
socket.send(包);
sendState(“关联”);
//得到回应
数据包=新数据包(基本单位,基本单位长度);
套接字接收(数据包);
字符串行=新字符串(packet.getData(),0,packet.getLength());
handler.sendMessage(
获取(handler,MainActivity.UdpClientHandler.UPDATE_MSG,line));
}捕获(SocketException e){
e、 printStackTrace();
}捕获(未知后异常e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
if(套接字!=null){
socket.close();
handler.sendEmptyMessage(MainActivity.UdpClientHandler.UPDATE_END);
}
}
}

}
通过将其与udp套接字构造上的特定端口绑定,问题得以解决

代码:

套接字=新的DatagramSocket(3000)//将其绑定到特定端口的正确方法


address=InetAddress.getByName(dstAddress)

错误是什么?是否绑定UDP端口以接收数据包?@t0mm13b没有错误。我认为我正在将它绑定到端口,因为空构造函数绑定到可用端口