代码如下#include<iostream>
#include<winsock2.h>
using namespace std;void main(void)
{
WSADATA wsaData;
SOCKET ConnectingSocket;
SOCKADDR_IN ServerAddr;
int Port = 5150;
char buff[5]; ::WSAStartup(MAKEWORD(2,2) ,&wsaData );

ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(Port);
ServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); ConnectingSocket = ::socket(AF_INET ,SOCK_STREAM ,IPPROTO_TCP ); ::connect(ConnectingSocket ,(LPSOCKADDR)&ServerAddr ,sizeof(ServerAddr) ); ::send(ConnectingSocket ,"hell" ,5 ,0); ::send(ConnectingSocket ,"yous" ,5 ,0); cout<<::GetLastError()<<endl; ::recv(ConnectingSocket ,buff ,5 ,0);
}
#include "stdafx.h"
using namespace std;WSAOVERLAPPED AcceptOverlapped[5];
WSABUF buf[5];
WSAEVENT EventArray[5];
SOCKET ListeningSocket,ConnectingSocket[5];
DWORD EventTotal = 0 ,
RecvBytes = 0 ,
Flags = 0 ;DWORD WINAPI Overlapped_IO_Thread(LPVOID pvParam)
{
int Index = EventTotal; while(true)
{
Index = ::WSAWaitForMultipleEvents(EventTotal ,EventArray
,FALSE ,500 ,FALSE);   //如何使这里做到每当有新的连接时停止当前的waitfor重新开始wait呢?因为EventTotal的数量+1需要等待的事件数量增加.

if(Index == WSA_WAIT_TIMEOUT)
continue; Index -= WSA_WAIT_EVENT_0; ::WSAResetEvent(EventArray[Index]); ::WSAGetOverlappedResult(ConnectingSocket[Index] ,&AcceptOverlapped[Index] ,
&RecvBytes ,FALSE ,&Flags ); cout<<buf[Index].buf<<endl; ::WSARecv(ConnectingSocket[Index] ,&buf[Index] ,1 ,&RecvBytes ,
&Flags ,&AcceptOverlapped[Index] ,NULL);
} return 0;
}int main(int argc, char* argv[])
{
WSADATA wsaData;
SOCKADDR_IN ServerAddr;
DWORD Index = 0 ;
char buffer[5][5];
HANDLE hThread;
bool ThreadStart = true; ::WSAStartup(MAKEWORD(2,2) ,&wsaData ); ServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(5150); ListeningSocket = ::socket(AF_INET ,SOCK_STREAM ,IPPROTO_TCP ); ::bind(ListeningSocket ,(LPSOCKADDR)&ServerAddr ,sizeof(ServerAddr) ); ::listen(ListeningSocket ,5 ); while(EventTotal < 5)
{
Index = EventTotal; ConnectingSocket[EventTotal] = ::accept(ListeningSocket ,NULL ,NULL); ZeroMemory(&AcceptOverlapped[EventTotal] ,sizeof(WSAOVERLAPPED));

EventArray[EventTotal] = ::WSACreateEvent();
AcceptOverlapped[EventTotal].hEvent = EventArray[EventTotal]; buf[EventTotal].buf = buffer[EventTotal];
buf[EventTotal].len = 5; ::WSARecv(ConnectingSocket[EventTotal] ,&buf[EventTotal] ,1 ,&RecvBytes ,
&Flags ,&AcceptOverlapped[EventTotal] ,NULL); EventTotal++; if(ThreadStart)
{
hThread = ::CreateThread(NULL ,0 ,&Overlapped_IO_Thread ,NULL ,0 ,NULL);
ThreadStart = false;
}
} return 0;
}