繁体   English   中英

维护双向UDP连接

[英]Maintaining a bidirectional UDP connection

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM