gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:31:08 25 4
gpt4 key购买 nike

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

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

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

有没有办法做到这一点?我意识到可能有更有效的方法来做到这一点,但我仍然掌握网络编程的窍门,更重要的是,我的服务器目前基于我使用套接字数组的想法。如果没有办法,这当然是我会记住的教训。

编辑:我的印象是这行不通,因为我得到了一个关于“不能有多个连接”的异常,尽管我不能再得到那个异常。现在我收到一个对象错误。我很困惑,我需要再研究一下..

最佳答案

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

TCP 的唯一性在于 session 级别。换句话说,5 元组(源 ip、源端口、目标 ip、目标端口、协议(protocol))必须是唯一的,这样数据包才不会混淆它们的去向。

您可以让数千个客户端与给定的目标 IP/目标端口对通信(就像现在有大量用户点击 stackoverflow.com:80)。

所以是的,您可以做您正在做的事。

可能发现的是,如果您在仍有 session 处于 TIME_WAIT 状态时尝试绑定(bind)到该端口,您将无法绑定(bind)。这是为了阻止来自网络上先前 session 的任何实时数据包进入并破坏您的 session 。

关于 TIME_WAIT 的更多信息以及为什么需要它可以在 this excellent answer 中找到。 :-)

关于C# - 一个端口上的多个 TCP 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com