服务器端: WORD wVersionRequested;
WSADATA wsaData;
int err;
char buffer[256];

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) 
{
return ;
}


if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return ; 
} SOCKET Sockets[WSA_MAX_WAIT_EVENT];
WSAEVENT Event[WSA_MAX_WAIT_EVENT];
SOCKET Accept, Listen;
DWORD EventTotal = 0;
DWORD Index; Listen = socket(AF_INET, SOCK_STREAM, 0);
WSAEVENT NewEvent;
NewEvent = WSACreateEvent();
WSAEventSelect(Listen, NewEvent, FD_ACCEPT|FD_CLOSE); char hostname[256];
gethostname(hostname,sizeof(hostname));                     //这一代码是为
HOSTENT*hos=gethostbyname(hostname);                        //了实现自动获取安
CString CS=inet_ntoa(*(struct in_addr*)hos->h_addr_list[0]);// 装程序的主机代码

SOCKET socksrv = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in saServer;
//saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//宏INADDR_ANY定义的是0
saServer.sin_addr.S_un.S_addr = inet_addr(CS);//宏INADDR_ANY定义的是0
saServer.sin_family = AF_INET;
saServer.sin_port = htons(6000);
bind(socksrv, (SOCKADDR*)&saServer, sizeof(SOCKADDR)); listen(Listen, 5); for(int i=0; i<WSA_MAX_WAIT_EVENT; i++)
{
Sockets[i] = INVALID_SOCKET;
        Event[i] = WSA_INVALID_EVENT; }    Sockets[EventTotal] = Listen;
Event[EventTotal] = NewEvent;
EventTotal++; WSANETWORKEVENTS NetworkEvent; //   flag1 = 1;
while(1)
{

Index = WSAWaitForMultipleEvents(EventTotal, Event, FALSE, WSA_INFINITE, FALSE);
WSAEnumNetworkEvents(Sockets[Index - WSA_WAIT_EVENT_0], Event[Index - WSA_WAIT_EVENT_0],
                &NetworkEvent);
if(NetworkEvent.lNetworkEvents & FD_ACCEPT)
{
Accept = accept(Sockets[Index - WSA_WAIT_EVENT_0], NULL, NULL);
if(EventTotal > WSA_MAX_WAIT_EVENT)
{
closesocket(Accept);
break;
}
NewEvent = WSACreateEvent();
WSAEventSelect(Accept, NewEvent, FD_WRITE|FD_READ|FD_CLOSE);
Sockets[EventTotal] = Accept;
Event[EventTotal] = NewEvent;
EventTotal++;
}
if(NetworkEvent.lNetworkEvents & FD_READ)
{
recv(Sockets[Index - WSA_WAIT_EVENT_0], buffer, sizeof(buffer), 0);
}
if(NetworkEvent.lNetworkEvents & FD_WRITE)
{
send(Sockets[Index - WSA_WAIT_EVENT_0], "this is a text", sizeof("this is a text"), 0); }
if(NetworkEvent.lNetworkEvents & FD_CLOSE)
{
closesocket(Sockets[Index - WSA_WAIT_EVENT_0]);
for(int j=Index - WSA_WAIT_EVENT_0; j<WSA_MAX_WAIT_EVENT-1; j++)
{
Sockets[j] = Sockets[j+1];
Event[j] = Event[j+1];
}
Sockets[WSA_MAX_WAIT_EVENT-1] = INVALID_SOCKET;
            Event[WSA_MAX_WAIT_EVENT-1] = WSA_INVALID_EVENT;
} }


WSACleanup();
return ;
客户端在同一台机器上:
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}

if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 )
{ WSACleanup( );
return; 
} char hostname[256];
gethostname(hostname,sizeof(hostname));                     //这一代码是为
HOSTENT*hos=gethostbyname(hostname);                        //了实现自动获取安
CString CS=inet_ntoa(*(struct in_addr*)hos->h_addr_list[0]);// 装程序的主机代码

sockclt = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in saClient;
//saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//宏INADDR_ANY定义的是0
saClient.sin_addr.S_un.S_addr = inet_addr(CS);//宏INADDR_ANY定义的是0
saClient.sin_family = AF_INET;
saClient.sin_port = htons(6000);
connect(sockclt, (SOCKADDR*)&saClient, sizeof(SOCKADDR));
send(sockclt, "this is cao", strlen("this is cao")+1, 0);
closesocket(sockclt);
WSACleanup();为什么服务器端停在了Index = WSAWaitForMultipleEvents(EventTotal, Event, FALSE, WSA_INFINITE, FALSE);
相当于没有事件传信,请问这段程序有问题么,这是我按照书上试着写的,能给指出是什么问题么?
谢谢!!!