C# 客户端上10048的套接字错误?可能的原因?

C# 客户端上10048的套接字错误?可能的原因?,c#,networking,sockets,load-testing,C#,Networking,Sockets,Load Testing,我正在编写一个定制的TCP服务器和客户端,在执行大量请求(确切地说是60000个)时,我开始得到10048的套接字错误,“地址已经在使用中” 错误会一直发生,除非我暂停进程2或3分钟,然后再次开始,然后在重新启动后不久,它开始出现相同的错误。如果暂停客户机进程并重新启动服务器进程,我仍然会在客户机上收到相同的错误。因此,这是一个完全的客户端问题 但这没有意义,此错误通常只在绑定时发生,并且此错误发生在客户端而不是服务器上。可能的原因是什么 我的初始化的一个小摘录: TcpClient clien

我正在编写一个定制的TCP服务器和客户端,在执行大量请求(确切地说是60000个)时,我开始得到10048的套接字错误,“地址已经在使用中”

错误会一直发生,除非我暂停进程2或3分钟,然后再次开始,然后在重新启动后不久,它开始出现相同的错误。如果暂停客户机进程并重新启动服务器进程,我仍然会在客户机上收到相同的错误。因此,这是一个完全的客户端问题

但这没有意义,此错误通常只在绑定时发生,并且此错误发生在客户端而不是服务器上。可能的原因是什么

我的初始化的一个小摘录:

TcpClient client = new TcpClient();
client.Connect("XXXXX -- some ip", 25000);
client.NoDelay = true;
NetworkStream clientStream = client.GetStream();
此外,其他一切似乎都工作正常(包括来回发送所需的时间),在使用
127.0.0.1
时,这一点非常有效,但当将其放在另一台LAN计算机上时,我开始出现10048错误

我初始化它的方式有问题吗?还有什么会导致客户端出现此错误

请参阅设置锁定选项。你需要DontLinger或ReuseAddr,或者两者都需要,我不确定。基本上,在断开TCP连接后,套接字会停留在时间等待状态一段时间,一旦获得足够的套接字,就无法创建任何新的客户端连接。用netstat-na程序输出验证这一点

您还可以通过在中更改套接字以缩短其处于time_WAIT状态的时间 注册处: 默认值为4分钟,这可能会安全地减少到1或2分钟,特别是对于测试


免责声明:无论如何我都不是TCP专家。

您的客户端端口快用完了吗


一个可能的相关问题:

I添加了
client.LingerState=新的LingerOption(false,0)
和使用netstat,你说的对,我在时间上有一大堆连接,我的意思是,在添加
LingerState
bitReuseAddr之后,我还有很多时间等待。另一种方法是找到一种重复使用连接的方法,而不是在一次请求后将其拆掉。如果这是原因,那么,每当我使用localhost时,它是如何工作的呢?@Earlz:这可能是因为127.0.0.1上的连接使用了非常低(0?)的最大段生存期,因为我们真的无法获得漫游数据包。我在谷歌上找不到这方面的任何信息,但这是有意义的。您可以尝试使用一个接口IP,看看这是否能使它在本地机器上重现——尽管这也可以优化。如果可能的话,还可以在服务器上将TcpTimedWaitDelay设置为30秒()