服务器端的编程问题
我设计了一个Server端的程序,目的是可以接受N台机器发送来的消息(消息可看作字符),我使用的重叠端口模型 Overlapped 结构,我把 WSARecv 放在一个线程中来获得消息。
得到消息的机制是如果5ms内当前用户的 socket 没有东西收到(WSA_WAIT_TIMEOUT),则换下一个用户的 socket 进行接收。结构如下:
{
DWORD Result=WSAWaitForMultipleEvents(0x01,&OverLapped.hEvent,false,2,FALSE);
if(Result==WSA_WAIT_TIMEOUT)
{
GetNextUserSocket();
WSARecv(NextUserSocket,&RecievedData,1,&BufSize,&flag,&OverLapped,NULL);
}
}
现在问题是这样的,程序运行以后,在第一个用户连入Server大概2-3秒种以后,WSARecv 就开始报错,错误返回码是10055(WSAENOBUFS),而且奇怪的是,用户发过来的消息有时候能收到有时候收不到,而且收到的几率没有任何规律。
请问各位这个问题应当怎样解决?