在listen成功后,调用accept接受连接,连接成功,发送接收数据。如果客户端关闭winsock,那么调用close关闭,对于监听(listen)是循环调用的,但是accept以后要间隔很长时间才能连接成功,不知道什么原因。我的代码很乱,将就看吧!
SOCKET *h_Socket=(SOCKET*)pParam;
theApp.m_AppLayer.m_ServerSock.Attach(*h_Socket);

while(WaitForSingleObject(COMM_EVENT.m_hObject,100)==WAIT_TIMEOUT)
{
if (theApp.m_AppLayer.m_ServerSock.Listen(5))
{
    while (WaitForSingleObject(COMM_EVENT.m_hObject,100)==WAIT_TIMEOUT)
   {
if (theApp.m_AppLayer.m_ServerSock.Accept(theApp.m_AppLayer.m_MySocket)) break;
};
theApp.m_AppLayer.m_MySocket.AsyncSelect();
if (WaitForSingleObject(COMM_EVENT.m_hObject,100)==WAIT_OBJECT_0)
break;
CString ClientName;
UINT Port;
char Info[400];
theApp.m_AppLayer.m_MySocket.GetPeerName(ClientName,Port);
sprintf(Info,"连接%s成功",ClientName);
((CClientDlg *)theApp.m_pMainWnd)->ShowInfo(Info);
while (WaitForSingleObject(COMM_EVENT.m_hObject,100)==WAIT_TIMEOUT)
{
char Rec[100];
int RecLen=0;
if ((RecLen=theApp.m_AppLayer.m_MySocket.Receive(Rec,100))>0)
{
theApp.m_AppLayer.m_MySocket.Send("OK",3);
Sleep(100);
}
else if (RecLen==0)
{
while(theApp.m_AppLayer.m_MySocket.m_hSocket!=INVALID_SOCKET)
{
theApp.m_AppLayer.m_MySocket.Close();
// theApp.m_AppLayer.m_ServerSock.Close();
Sleep(100);
};
Sleep(2000);
while (!theApp.m_AppLayer.m_ServerSock.Create(4000))
{
break;
}
break;
}
}

}