Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Android 维护双向UDP连接_Android_Sockets_Udp_Ip_Datagram - Fatal编程技术网

Android 维护双向UDP连接

Android 维护双向UDP连接,android,sockets,udp,ip,datagram,Android,Sockets,Udp,Ip,Datagram,我正在编写一个Android UDP客户端,它连接到Windows服务器并与之双向通信(发送和接收的消息之间没有关系)。一旦初始数据报被发送到服务器,我希望能够在任何时候向任一方向发送数据。我的问题是: 1) 保持初始套接字打开并将其用于发送和接收是否正确 2) 我应该在同一个线程中发送和接收(接收时有一个超时)还是在不同的线程中发送和接收(允许接收阻塞) 3) 如果在一定时间间隔内未发送/接收数据,套接字是否会自动关闭 是的,这没有问题,是处理双向通信最方便的方式。此外,如果客户端位于NAT后

我正在编写一个Android UDP客户端,它连接到Windows服务器并与之双向通信(发送和接收的消息之间没有关系)。一旦初始数据报被发送到服务器,我希望能够在任何时候向任一方向发送数据。我的问题是:

1) 保持初始套接字打开并将其用于发送和接收是否正确

2) 我应该在同一个线程中发送和接收(接收时有一个超时)还是在不同的线程中发送和接收(允许接收阻塞)

3) 如果在一定时间间隔内未发送/接收数据,套接字是否会自动关闭

  • 是的,这没有问题,是处理双向通信最方便的方式。此外,如果客户端位于NAT后面,则需要客户端才能正常工作。即使您绑定到客户端上的相同IP和端口,也不能保证在NAT中获得相同的映射。因此,服务器可能无法到达客户端。请记住,这些映射会超时,并且是从NAT网络内部启动的,因此,如果客户端长时间处于空闲状态,则可能需要进行一些探测

  • 这取决于您如何设计应用程序,但这样做没有问题。只需使用例如select来监视套接字的读写状态。如果创建一个非阻塞套接字并结合读/写队列,则一定不会阻塞操作。由于UDP要么写入所有内容,要么不写入任何内容,因此队列非常简单

  • 根据我的经验,这是Android上的特定供应商。有些手机长时间保持插座打开,而另一些手机在闲置一段时间后关闭。当设备进入睡眠状态(按下电源按钮时的状态)时,所有手机似乎都会关闭插座,但与后台任务相关的手机除外


  • 谢谢你的全面回答:)