-1

我正在尝试编写一个服务器/客户端对以通过 udp 运行,而我能够让它运行的唯一方法是让服务器在连接开始之前知道客户端的 ip 和端口。我的新设计包括等待数据包进来、记录发送者地址、分叉到子进程(父进程循环并继续侦听),然后connect's将数据包传输给客户端。然后子级应该只接收来自关联客户端的数据包,但文档不清楚父套接字将继续接收来自该客户端的流量。我正在开发一个程序来尝试它,但我想我可以同时问这个问题。

编辑:似乎当孩子的插座是connected'd它也会连接父母的插座。

4

1 回答 1

1

UDP协议不操作连接,它是一个无连接协议。一侧监听而另一侧仅发送数据报以使数据通道工作就足够了。

关于这个问题(对不起,之前没有明白这一点):使用 UDP 时分叉不是出路。基于连接的协议广泛用于该技术。这是可能的,因为:

  • 你可以在之后分叉listen()
  • 第一个进程接受连接与它一起工作(并且只有该进程拥有新创建的连接套接字。

当您使用 UDP 时,您没有这样的差距(就像以前accept()使用 TCP 一样)知道何时准确地分叉(尤其是当您有密集的数据报流时)。

因此,当您设计 UDP 服务时,您需要

  • 使用带有事件循环的非阻塞 I/O 或
  • 设计螺纹解决方案。
于 2013-08-16T09:03:37.893 回答