为什么我的程序不能接收数据(没有触发FD_READ和FD_CONNECT事件)-附SDK源码,在线等待
#include<windows.h>
#include"resource.h"
#define WM_SOCKET_NOTIFY (WM_USER+1)
HWND hwndDlgIn;
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR szCmdLine,int iCmdShow)
{ static TCHAR szAppName[]=TEXT("hellowin");
HWND hwnd;
WNDCLASS wndclass;
MSG msg;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=TEXT("MainMenu");//NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),
szAppName,MB_ICONERROR);
return 0;
}
hInst=hInstance;
////////////
hwnd=CreateWindow(szAppName,
TEXT("The Hello Program"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,//LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU)),
hInstance,
NULL);
////////////
hwndDlgIn=CreateDialog(hInstance,TEXT("DlgIn"),hwnd,DlgProc);
ShowWindow(hwnd,iCmdShow);
ShowWindow(hwndDlgIn,SW_SHOW);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
if(hwndDlgIn==0||!IsDialogMessage(hwndDlgIn,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HMENU hMenu;
switch(message)
{
case WM_SETFOCUS:
SetFocus(hwndDlgIn);
return 0;
case WM_COMMAND:
hMenu=GetMenu(hwnd);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
BOOL CALLBACK DlgProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HWND hwndEdit1,hwndEdit2;
static char szIPAddr[32]={"132.163.135.130"};
static SOCKET sock;
static struct sockaddr_in sa;
static TCHAR szOKLabel[32];
int iError,iSize;
unsigned long ulTime;
WORD wEvent,wError;
WSADATA WSAData;
switch(message)
{
case WM_INITDIALOG:
hwndEdit1=GetDlgItem(hwnd,IDC_EDIT1);
hwndEdit2=GetDlgItem(hwnd,IDC_EDIT2);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
if(iError=WSAStartup(MAKEWORD(2,0),&WSAData))
{
MessageBox(hwnd,"wasstartup error","",MB_OK);
return TRUE;
}
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sock==INVALID_SOCKET)
{
MessageBox(hwnd,"sock create error","",MB_OK);
WSACleanup();
return TRUE;
}
MessageBox(hwnd,"socket created!","",MB_OK);
if(SOCKET_ERROR==WSAAsyncSelect(sock,hwnd,WM_SOCKET_NOTIFY,FD_CONNECT|FD_READ))
{
MessageBox(hwnd,"wsaaysncselect error","",MB_OK);
closesocket(sock);
WSACleanup();
return TRUE;
}
sa.sin_family=AF_INET;
sa.sin_port=htons(IPPORT_TIMESERVER);
sa.sin_addr.S_un.S_addr=inet_addr(szIPAddr);
connect(sock,(SOCKADDR *)&sa,sizeof(sa));
if(WSAEWOULDBLOCK!=(iError=WSAGetLastError()))
{
MessageBox(hwnd,"connect error","",MB_OK);
closesocket(sock);
WSACleanup();
return TRUE;
}
SetWindowText(hwndEdit1,szIPAddr);
return TRUE;
case WM_SOCKET_NOTIFY:
wEvent=WSAGETSELECTEVENT(lParam);
wError=WSAGETSELECTERROR(lParam);
switch(wEvent)
{
case FD_CONNECT:
MessageBox(hwnd,"","",MB_OK);
if(wError)
{
MessageBox(hwnd,"fdconnect error","",MB_OK);
closesocket(sock);
sock=0;
WSACleanup();
return TRUE;
}
recv(sock,(char*)&ulTime,4,MSG_PEEK);
MessageBox(hwnd,"waiting to receive...","",MB_OK);
return TRUE;
case FD_READ:
MessageBox(hwnd,"","",MB_OK);
if(wError)
{
MessageBox(hwnd,"fd read error","",MB_OK);
closesocket(sock);
sock=0;
WSACleanup();
return TRUE;
}
iSize=recv(sock,(char*)&ulTime,4,0);
ulTime=ntohl(ulTime);
MessageBox(hwnd,"Received current time","",MB_OK);
SetWindowText(hwndEdit2,(char *)ulTime);
return TRUE;
}
case IDCANCEL:
DestroyWindow(hwndDlgIn);
hwndDlgIn=NULL;
}
return TRUE;
case WM_CLOSE:
DestroyWindow(hwndDlgIn);
hwndDlgIn=NULL;
closesocket(sock);
sock=0;
WSACleanup();
return TRUE;
}
return FALSE;
}
为什么上面的代码不能触发WM_SOCKET_NOTIFY消息,后面的事件为什么不能发生??
请各位指教