#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;
}

解决方案 »

  1.   

    如果你inet_addr返回正确的话,十有八九是对方没起服务
      

  2.   

    WSAGetLastError(),用这个函数获取一下错误代码;
    我认为是因为非阻塞模式下不能立即返回的错误。看看WSAGetLastError()是不是WSAEWOULDBLOCK
      

  3.   

    Agree with jemmylau(枕头):
        非阻塞模式下不能立即返回的错误.If you get error ,it suggests that 
    "对方没起服务".
      

  4.   

    to  jemmylau(枕头) ( ):
      不是WSAEWOULDBLOCK,也就是说资源没有被占用,那什么不行呢
      

  5.   

    大哥哥  对方没accept 你connect当然错拉
      

  6.   

    大哥哥  对方没accept 你connect当然错拉