C# - 一个端口上有多个TCP连接?

时间:2010-10-17 09:40:47

标签: c# sockets tcp

我想知道的是,我是否可以这样做

client_db.clients[numberOfClients].sock = listener.Accept();

对于我的网络课程,我正在编写聊天客户端和它连接的服务器。我有一组客户端对象,其中包含有关连接到服务器的每个人的各种信息。在处理一个客户端之前,我会有一个套接字等于listener.Accept,然后我会用那个套接字做我所有的东西。我错误地认为我可以使用一组套接字与多个客户端建立多个TCP连接。

有办法做到这一点吗?我意识到可能有更有效的方法来做到这一点,但我仍然掌握着网络编程,更重要的是,我的服务器目前基于我使用套接字阵列的想法。如果没有办法,这肯定是我记得的一课。

编辑:我认为这不起作用,因为我得到一个例外,说“不能有多个连接”,但我不能再次得到那个例外。现在我收到一个对象错误。我很困惑,我需要再研究一下......

1 个答案:

答案 0 :(得分:33)

使用TCP,你只能有一个进程监听端口,但是当它接受连接时(就像你的那样),你会得到一个完全不同的套接字描述符来进行会话,所以你可以回去听一下另一个连接的原始套接字描述符。

TCP的唯一性在会话级别。换句话说,5元组(source-ip,source-port,dest-ip,dest-port,protocol)必须是唯一的,以便数据包不会对它们的去向感到困惑。

您可以让数千个客户端与给定的dest-ip / dest-port对通话(就像现在有很多人点击stackoverflow.com:80一样)。

是的,你 允许你做你正在做的事情。

> > > > > > 这是为了阻止来自网络上一个会话的任何实时数据包进入并破坏您的会话。

有关TIME_WAIT及其所需原因的更多信息,请参阅this excellent answer: - )