维护双向UDP连接

时间:2013-04-03 17:40:04

标签: android sockets udp ip datagram

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

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

2)我应该在同一个线程中发送和接收(接收时超时)还是在单独的线程中(允许接收阻止)?

3)如果在一定间隔内没有发送/接收数据,套接字会自动关闭吗?

1 个答案:

答案 0 :(得分:6)

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

  2. 这取决于您如何设计应用程序,但这样做没有问题。只需使用例如select监视套接字的读写状态即可。如果创建一个与读/写队列结合的非阻塞套接字,则确保永远不会阻止操作。由于UDP要么全部写入,要么什么都不写,队列非常简单。

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