#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:
int temp;
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_ACCEPT|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);
//temp=bind(sock,(LPSOCKADDR)&sa,sizeof(sa));
temp=connect(sock,(SOCKADDR *)&sa,sizeof(sa));
if(WSAEWOULDBLOCK!=(iError=WSAGetLastError()))
{
MessageBox(hwnd,"connect error","",MB_OK);
closesocket(sock);
WSACleanup();
return TRUE;
}
SetWindowText(hwndEdit1,szIPAddr);
listen(sock,2);
return TRUE;
case WM_SOCKET_NOTIFY:
wEvent=WSAGETSELECTEVENT(lParam);
wError=WSAGETSELECTERROR(lParam);
switch(wEvent)
{
case FD_ACCEPT:
MessageBox(hwnd,"accept","",MB_OK);
return TRUE;
case FD_CONNECT:
MessageBox(hwnd,"","",MB_OK);
if(wError)
{
MessageBox(hwnd,"fdconnect error","",MB_OK);
closesocket(sock);
sock=0;
WSACleanup();
return TRUE;
}
MessageBox(hwnd,"waiting to receive...","",MB_OK);
return TRUE;
case FD_READ:
MessageBox(hwnd,"","",MB_OK);
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;
}
#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:
int temp;
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_ACCEPT|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);
//temp=bind(sock,(LPSOCKADDR)&sa,sizeof(sa));
temp=connect(sock,(SOCKADDR *)&sa,sizeof(sa));
if(WSAEWOULDBLOCK!=(iError=WSAGetLastError()))
{
MessageBox(hwnd,"connect error","",MB_OK);
closesocket(sock);
WSACleanup();
return TRUE;
}
SetWindowText(hwndEdit1,szIPAddr);
listen(sock,2);
return TRUE;
case WM_SOCKET_NOTIFY:
wEvent=WSAGETSELECTEVENT(lParam);
wError=WSAGETSELECTERROR(lParam);
switch(wEvent)
{
case FD_ACCEPT:
MessageBox(hwnd,"accept","",MB_OK);
return TRUE;
case FD_CONNECT:
MessageBox(hwnd,"","",MB_OK);
if(wError)
{
MessageBox(hwnd,"fdconnect error","",MB_OK);
closesocket(sock);
sock=0;
WSACleanup();
return TRUE;
}
MessageBox(hwnd,"waiting to receive...","",MB_OK);
return TRUE;
case FD_READ:
MessageBox(hwnd,"","",MB_OK);
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;
}
我认为是因为非阻塞模式下不能立即返回的错误。看看WSAGetLastError()是不是WSAEWOULDBLOCK
非阻塞模式下不能立即返回的错误.If you get error ,it suggests that
"对方没起服务".
不是WSAEWOULDBLOCK,也就是说资源没有被占用,那什么不行呢