TCP套接字缓冲区和数据溢出

时间:2011-08-31 17:46:23

标签: c# sockets buffer

我的应用程序充当银行服务器的客户端,发送请求并从该服务器获取响应。在数据库中完成响应处理需要一些时间后,如果服务器在0.5秒内发送响应并且db操作需要1秒,之后只有我的应用程序再次尝试通过开始接收从服务器接收数据,那么数据将在某处累积,如果是的,它将存储在哪里。是否存在一些限制,以便数据溢出,如果发生,是否会关闭此套接字。我将我的套接字缓冲区大小声明为1024.如果有人也有一些明确我怀疑的文章请分享。

2 个答案:

答案 0 :(得分:1)

您能控制服务器发送给您的内容吗?在大多数情况下,当接收器对接收的数据进行操作时,在完成工作时发送应用级ACK将允许发送者知道何时发送下一个请求。这将确保没有数据丢失(因为TCP将确保它不会在网络中丢失)。

如果您无法更改服务器向您发送数据的方式,您可以考虑在不同的线程中运行接收器,它将每个传入的请求保存到缓存(仅在RAM或HD中)。然后,工作线程(或多个线程)将从该缓存读取请求并完成您需要的工作。这样您就可以完全控制数据的缓冲。

答案 1 :(得分:0)

我想你会自己用Socket读取数据 - 不是吗?不只是阅读不超过你可以处理。发送方应该这样做 - 如果输入缓冲区溢出,发送方应该在发送更多之前等待。但在这种情况下可能会出现错误。如果这确实是一个大问题,那么首先将数据下载到磁盘上的文件中,然后在获得所有数据后处理数据。我不认为您的硬盘会比您的网络慢:)

相关问题