我遇到一个很奇怪的问题,我做了一个服务器的程序,客户端发一条信息,我可以正常的接收,并可以将经过处理的信息发回客户端。但是,之后,服务器会不知为什么再次响应
FD_READ,结果是服务器什么都没有读到。可是客户再发信息之后,服务器又可以正常接收,但是又收了两次。总而言之:一条信息服务器读两次。其中一次没读到任何东西。以下是源代码:
LRESULT CDTSTOCKDlg::OnAccept(WPARAM wParam, LPARAM lParam)
{
if (WSAGETSELECTERROR(lParam))
{
m_ListSys.InsertString(0,"在服务器端口检测到错误");
return 0L;
}

if(WSAGETSELECTEVENT(lParam) == FD_ACCEPT)//如果
{
m_hClientSocket = accept(m_hSocket,(LPSOCKADDR)  &LocalAddr,0);

if (m_hClientSocket == INVALID_SOCKET)
{
m_ListSys.InsertString(0,"服务器端口接受连接失 败");
return 0L;
}

WSAAsyncSelect(m_hClientSocket,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE);
m_bClientStarted=TRUE;
}
m_ListSys.InsertString(0,"有工作站连接上了服务器!"); return 0L;
}LRESULT CDTSTOCKDlg::OnReadClose(WPARAM wParam, LPARAM lParam)
{
if (WSAGETSELECTERROR(lParam))
{
m_ListSys.InsertString(0,"在服务器端口读取检测到错误");
return 0L;
}

if(!m_bClientStarted)
{
//为何还是会有数据产生?
m_ListSys.InsertString(0,"有数据到达,但是没有工作站连接。!");
return 0L;
}

switch (WSAGETSELECTEVENT(lParam))
{
case FD_READ:
m_ListSys.InsertString(0,"读取工作站发来的信息!");
if(!ChildProcess())
m_ListSys.InsertString(0,"读取工作站信息失败!");
// m_bClientStarted=FALSE;
break;
case FD_CLOSE:
closesocket(m_hClientSocket);
m_ListSys.InsertString(0,"有工作站退出了服务器!");
m_bClientStarted = FALSE;
break;
}
return 0L;
}