|
Правильно ли я понял идею асинхронных сокетов?
|
Posted by: wrwrwer on December 14, 2001 at 17:52:43
Posters Details: [212.42.81.174] [], X-Forwarded 4: [] [Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)]
Правильно ли я понял идею асинхронных сокетов? По идее я что то упустил если не сложно подскажите ////////////////////////////////////////////////////////////////// #include <windows.h> #include <winsock.h> #define WM_SELECT WM_USER+1 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { SOCKET sock; SOCKET newsock[1000]; WSADATA ws; DWORD currentsock; WORD WSAEvent; sockaddr_in addr; MSG msg; if(WSAStartup(0x101,&ws)) {MessageBox(NULL,"WSAStartup Error",NULL,NULL);return 0;} sock=socket(AF_INET,SOCK_STREAM,0); addr.sin_addr.s_addr=INADDR_ANY; addr.sin_family=AF_INET; addr.sin_port=htons(8888); if(bind(sock,(sockaddr*)&addr,sizeof(addr))) {MessageBox(NULL,"this port is used",NULL,NULL);return 0;} if(listen(sock,5)) {MessageBox(NULL,"listen Error",NULL,NULL);return 0;} WSAAsyncSelect(sock,(HWND__ *)hInstance,WM_SELECT,FD_ACCEPT|FD_READ|FD_CLOSE); while(GetMessage(&msg,NULL,NULL,NULL)) { switch (msg.message) { case WM_SELECT: MessageBox(NULL,"WM_SELECT",NULL,NULL); currentsock=msg.wParam; WSAEvent=WSAGETSELECTEVENT(msg.lParam); switch(WSAEvent) { case FD_CLOSE: MessageBox(NULL,"FD_CLOSE",NULL,NULL); shutdown(newsock[currentsock],1); closesocket(newsock[currentsock]); break; case FD_READ: MessageBox(NULL,"FD_READ",NULL,NULL); break; case FD_ACCEPT: MessageBox(NULL,"FD_ACCEPT",NULL,NULL); newsock[currentsock]=accept(sock,NULL,NULL); break; } break; } } WSACleanup(); return 0; }
Follow Ups:
|
|