做了一个程序,需要用socket发数据,代码大致如下:
LRESULT CMainFrame::OnAccept(WPARAM wParam, LPARAM lParam)
{
if (WSAGETSELECTERROR(lParam))
{
AddToDataList(IDC_ALARMDATA_LIST,"Error detected on entry into OnServerAccept.");
return 0L;
}

if(WSAGETSELECTEVENT(lParam) == FD_ACCEPT)//如果
{
// closesocket(Client);
    Client = accept(ServerSocket,(LPSOCKADDR)&m_sockServerAddr,0);
        sendClient=Client;
char     cError[15];
sprintf(cError,"%d",sendClient);
strcat(cError,"accept");
AddToDataList(IDC_ALARMDATA_LIST,cError);     if (Client == INVALID_SOCKET)
{
AddToDataList(IDC_ALARMDATA_LIST,"Server socket failed to accept connection.");
return 0L;
}

WSAAsyncSelect(Client,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE|FD_OOB|FD_CONNECT);//|FD_QOS|FD_GROUP_QOS|FD_ROUTING_INTERFACE_CHANGE|FD_ADDRESS_LIST_CHANGE); IsTrue = TRUE;
}
发数据的函数:
void SendToNet(char abNet[],int NetLength)
{
// DWORD nWritten;
DWORD     nError;
HLOCAL hlocal=NULL;

if(!IsTrue)
return;
char strOut[256]; if(send(sendClient,abNet,NetLength,0) == SOCKET_ERROR)// recv(ServerSocket,buf,sizeof(buf),0);
{
char     cError[20];
sprintf(cError,"%d",sendClient);
strcat(cError,"send");
AddToDataList(IDC_ALARMDATA_LIST,cError);
nError=GetLastError();

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,nError,
MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),(LPTSTR)&hlocal,0,NULL);
strcat(strOut,"网络发送数据错误。");
AddToDataList(IDC_ALARMDATA_LIST,strOut);
closesocket(Client);
AddToDataList(IDC_ALARMDATA_LIST,(PTSTR)hlocal);
IsTrue=FALSE;
return;
}
}
sendClient和Client都是全局变量
奇怪的是 发送数据过了两三个小时后sendClient的值就变了
比如说,OnAccept()时 sendClient和Client的值是2253
过了两三个小时后,sendClient的值可能变成2223685,同时接收端就收不到数据了,再连接socket也是Client创建失败。可是sendClient的值可能发生改变的地方只有OnAccept()函数里面,我在里面加上了语句,如果sendClient重新被赋值会显示出来,可是除了接收端刚开始连接时调用了OnAccept(),后面就一直没有调用过OnAccept(),sendClient的值是如何被改变了呢?有那位高人能指点一下,多谢!多谢!