tcp - 大容量TCP Client的设计

标签 tcp timeout client volume

我有一个 .NET TCP 客户端,它向(.NET 异步)TCP 服务器发送大量消息。

我需要继续向服务器发送消息,但由于 TIME_WAIT,我用完了客户端上的端口。

程序如何在不使用所有可用端口的情况下持续可靠地发送消息?

有没有一种方法可以继续重复使用同一个套接字。我查看了 Disconnect() 和 REUSEADDRESS 套接字标志,但找不到任何好的使用示例。事实上,大多数消息来源都说不要使用 Disconnect,因为它用于较低级别的使用(即它只回收套接字句柄)。

我在想我需要切换到 UDP 还是有一种使用 C++ 和 IOCP 的方法?

最佳答案

如果您的服务器和客户端知道数据的格式,您可以保持套接字打开。您正在关闭套接字,以便服务器可以“看到”客户端“完成”。

如果您有一些协议(protocol),那么服务器可以“知道”它何时完成接收数据 block 。

您可以寻找某种消息结束标记,您可以传入消息的长度,并根据大小读取其余部分,等等。不同的实现方式。

但没有理由不断地打开和关闭与服务器的连接——这就是让你丧命的原因。

关于tcp - 大容量TCP Client的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/158152/

相关文章:

javascript - 使用 AngularJS 对 $http 请求实现延迟 ($timeout)

c# - 如果没有发送数据,TCP 套接字会在一段时间后自动关闭吗?

c++ - WSAGetLastError 返回 WSAENOTSOCK - 原因?

c - TCP connect() 总是通过

go - 设置内置 HTTP 请求超时的最佳方式

c - recv() 没有从网络获取值

java - 独特地发现客户的最佳方法是什么?

apache-spark - 解决从 Docker 容器以客户端模式运行的 Apache Spark 应用程序的问题

JAVA TCP 服务器错误

azure - Azure上的云架构,用于物联网