几个UDP套接字,绑定到同一个端口?

时间:2011-01-09 10:38:09

标签: network-programming udp

首先 - 这不是“如何绑定到另一个软件的端口”的问题。

现在,我有一个客户端 - 服务器应用程序,基于TCP,我想让它成为UDP,但我错过了什么..

我对这个应用程序有两条规则(我提出):
1)“服务器”可以留在路由器后面,没有任何端口转发配置 2)“客户端”只能收听一个端口。

TCP中的

我这样做:
1)服务器在端口X上打开与客户端的初始连接 2)当客户想要打开到服务器的通信通道时,它使用初始套接字向服务器请求新的套接字 3)服务器创建一个新的套接字并连接到端口X上的客户端。 4)客户端在端口X上接受这个新连接,现在客户端在这个新套接字上与服务器通信。

这样我就可以在同一个端口上建立多个连接。

在UDP中,我有一点问题。
1)服务器在端口X上将初始连接dgram发送给客户端 2)当客户端想要打开到服务器的通信通道时,它会向初始套接字的addr发送新套接字的请求。
3)服务器接收消息,创建一个新的udp套接字,并使用它在端口X上向客户端发送数据。
4)客户端收到新的dgram,并且......?

基本上我现在想要发生的是“接受”这种联系。意思是:创建一个新的UDP套接字,将它也绑定到端口X,并仅从该特定的传入套接字addr(ip,port)接收数据。但我不能这样做因为我不能将多个套接字绑定到同一个端口 那么在一个端口上创建多个udp连接的方法是什么? (在网络方式中,不只是创建一个dgrams的环形缓冲区并发送到正确的套接字)

谢谢:)

1 个答案:

答案 0 :(得分:4)

由于UDP是无连接协议,因此在步骤4中检查UDP消息的内容并确定如何处理它。换句话说,消息类型仅由其内容定义。

但是,我觉得你的整个设计有点不对劲。 客户端更常见于防火墙(仅仅因为存在比服务器更多的客户端)。如果您需要将服务器置于防火墙之后,则只需将防火墙配置为允许连接到该组端口。即使您只打开了一个端口,也没有什么能阻止客户端多次并行连接到同一服务器端口。