#include <windows.h>
#include <iostream.h>
#define WM_SOCKET (WM_USER+20) 
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
int main()
{
   char szAppName[]="windows";
   WNDCLASS wndclass;
   wndclass.style        = CS_HREDRAW  | CS_VREDRAW ;         
   wndclass.lpfnWndProc  = WndProc;         
   wndclass.cbClsExtra   = 0 ;         
   wndclass.cbWndExtra   = 0 ;         
   wndclass.hInstance    = NULL ;         
   wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;         
   wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;         
   wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;       
   wndclass.lpszMenuName = NULL ;        
   wndclass.lpszClassName= szAppName ; 
   RegisterClass(&wndclass);
   
   HWND hwnd = CreateWindow (szAppName,TEXT ("Button Look"),        
   WS_OVERLAPPEDWINDOW,       
   CW_USEDEFAULT, CW_USEDEFAULT,        
   CW_USEDEFAULT, CW_USEDEFAULT,        
   NULL, NULL, NULL, NULL) ; 
   if(hwnd==NULL)
   {
   cout<<"hwnd is err"<<endl;
   }
   WORD wv=MAKEWORD(2,2);
   WSADATA ws;
   int err=WSAStartup(wv,&ws);
   if(err==-1)
   {
   cout<<"wsastartup is err"<<endl;
   return 0;
   }
   SOCKET s=socket(AF_INET,SOCK_STREAM,0);
   SOCKADDR_IN si;
   si.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
   si.sin_family=AF_INET;
   si.sin_port=htons(4567);
   if(bind(s,(SOCKADDR*)&si,sizeof(si))==-1)
   {
   cout<<"bind is err"<<endl;
   return 0;
   }
   WSAAsyncSelect(s,hwnd,WM_SOCKET,FD_ACCEPT|FD_CLOSE);
   listen(s,5);
   BOOL bRet;
   MSG msg;
   while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
   
   { 
   
   if (bRet == -1)
   
   {
   
 return 0;
   }
   
   else
   
   {
   
   TranslateMessage(&msg); 
   
   DispatchMessage(&msg); 
   
   }
   
   }
   return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
switch(msg)
{
case WM_SOCKET:
{
SOCKET s=wparam;
if(WSAGETSELECTERROR(lparam))
{
closesocket(s);
return 0;
}
switch(WSAGETSELECTEVENT(lparam))
{
case FD_ACCEPT:
{
SOCKADDR_IN di;
int len=sizeof(di);
SOCKET ts=accept(s,(SOCKADDR*)&di,&len);
WSAAsyncSelect(ts,hwnd,WM_SOCKET,FD_READ|FD_WRITE|FD_CLOSE);
}
break;
case FD_READ:
{
char szChar[256];
int rzbuf=recv(s,szChar,256,0);
szChar[rzbuf]='\0';
cout<<szChar<<endl;
}
break;
case FD_WRITE:
{

}
break;
case FD_CLOSE:
{
closesocket(s);
}
break;
}

}
return 0;
    case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,msg,wparam,lparam);
}
上面的int rzbuf=recv(s,szChar,256,0);这里面的套接字为什么是S,还不是accept出来的ts???
我这里没弄明白