下面的代码块时并行至4-5线程运行良好,但作为启动的线程的数目某处增加超过10个并发线程Socket.Recieve失败当多线程
int totalRecieved = 0;
int recieved;
StringBuilder contentSB = new StringBuilder(4000);
while ((recieved = socket.Receive(buffer, SocketFlags.None)) > 0)
{
contentSB.Append(Encoding.ASCII.GetString(buffer, 0, recieved));
totalRecieved += recieved;
}
的Recieve
方法返回失败零字节被读取,如果我继续调用接收方法,那么我最终会得到异常'已建立的连接被主机中的软件中止'。所以我假设主机实际上发送了数据然后关闭了连接,但由于某种原因,我从未收到过它。
我很好奇为什么当有很多线程出现这个问题。我认为它必须与这样一个事实有关,即每个线程的执行时间不会太多,因此导致此错误的线程有一些空闲时间。只是不知道为什么空闲时间会导致套接字不能接收任何数据。
编辑:只是为了澄清。每个线程都有自己的个人套接字读取不同的数据。
要明确一点,每个线程都有自己的套接字? – 2010-04-07 20:14:47
我不清楚的是,如果你有很多线程每个线程读一个套接字或一个套接字? – ParmesanCodice 2010-04-07 20:15:24
你知道SocketError代码(SocketException.ErrorCode)吗?可能是一个超时... – ParmesanCodice 2010-04-07 20:30:16