Android UDP 开发中,在接收数据的时候,有的手机无法阻塞???
原因:
不要在主线程中写相关UDP代码,将代码写到新建线程run函数中。
问题解决代码示例:
new Thread(){
public void run()
{
// UDP服务器监听的端口
Integer port = 8888;
// 接收的字节大小,客户端发送的数据不能超过这个大小
byte[] buf = new byte[1024];
// 建立Socket连接
DatagramSocket datagramSocket = null;
if(datagramSocket == null)
{
try
{
datagramSocket = new DatagramSocket(null);
datagramSocket.setReuseAddress(true);
datagramSocket.bind(new InetSocketAddress(port));
}
catch (SocketException e)
{
e.printStackTrace();
}
}
try
{
DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);
try
{
while (isOnResume)
{
// 准备接收数据
datagramSocket.receive(datagramPacket);
String result = new String(datagramPacket.getData() , datagramPacket.getOffset() , datagramPacket.getLength());
Log.e("TAG", result);
// Log.e("UDP Demo", datagramPacket.getAddress().getHostAddress().toString() + ":" + result);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
catch (Exception e)
{
e.printStackTrace();
}
};}.start();
另外代码10行到23行的写法也一并解决了bind failed: EADDRINUSE (Address already in use)的错误。!!!!
王月星推荐
在Android UDP开发中,部分手机出现接收数据无法阻塞的问题。解决方法是避免在主线程运行UDP代码,而应将其放入新的线程。示例代码可以同时解决EADDRINUSE错误。
991

被折叠的 条评论
为什么被折叠?



