服务端和客户端能互相聊天就行。只要求在winmain()下的。MFC不要。简单入门即可。带注释书上的例子也可以,给我一个吧。谢谢了。想了解下winmain()函数下cock是怎么初始化,怎么用的……

解决方案 »

  1.   

    http://hcmfys.javaeye.com/blog/617224这个应该可以帮到你,我当初也是看着这份代码学习的。
      

  2.   

         
    1.void main()  
    2.{  
    3. WORD wVersionRequested;  
    4. WSADATA wsaData;  
    5. int err;  
    6.   
    7. wVersionRequested = MAKEWORD( 1, 1 );  //使用socket1.1版本
    8.   
    9. err = WSAStartup( wVersionRequested, &wsaData );  //初始化socket通信环境
    10. if ( err != 0 ) {  
    11.  return;  
    12. }  
    13.   
    14.  
    15. if ( LOBYTE( wsaData.wVersion ) != 1 ||  
    16.        HIBYTE( wsaData.wVersion ) != 1 ) {  
    17.  WSACleanup( );   //清理
    18.  return;   
    19. }  
    20. SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);  //使用TCP/IP协议和流式传输生成一个socket
    21.  
    22. SOCKADDR_IN addrSrv;  //为服务器端socket绑定地址
    23. addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);  //0,0,0,0 监听本电脑上的所有IP地址,如果有多网卡,则同时监听多网卡
    24. addrSrv.sin_family=AF_INET;  //地址族
    25. addrSrv.sin_port=htons(6000);  //6000端口
    26.  
    27. bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  //绑定
    28.  
    29. listen(sockSrv,5);  //是sockSrv保持监听状态,同时最多允许5个客户端连接
    30.  
    31. SOCKADDR_IN addrClient;  
    32. int len=sizeof(SOCKADDR);  
    33.  
    34. while(1)  
    35. {  
    36.  SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);  //接受客户端连接(使用同步模型,在没有客户端连接的情况下,阻塞本线程)
    37.  char sendBuf[100];  
    38.  sprintf(sendBuf,"Welcome %s to http://www.sunxin.org",  
    39.   inet_ntoa(addrClient.sin_addr));  //addrClient.sin_addr指明了客户端的IP
    40.  send(sockConn,sendBuf,strlen(sendBuf)+1,0);  //发送信息给客户端
    41.  char recvBuf[100];  
    42.  recv(sockConn,recvBuf,100,0);  //接受客户端回应
    43.  printf("%s\n",recvBuf);  
    44.  closesocket(sockConn);  //关闭socket
    45. }  
        WSACleanUp();//清理
    46.}      服务端注释
      

  3.   

    4.void main()  
    5.{  
    6. WORD wVersionRequested;  
    7. WSADATA wsaData;  
    8. int err;  
    9.   
    10. wVersionRequested = MAKEWORD( 1, 1 );  //socket1.1版本
    11.   
    12. err = WSAStartup( wVersionRequested, &wsaData );  //初始化socket环境
    13. if ( err != 0 ) {  
    14.  return;  
    15. }  
    16.   
    17.  
    18. if ( LOBYTE( wsaData.wVersion ) != 1 ||  
    19.        HIBYTE( wsaData.wVersion ) != 1 ) {  
    20.  WSACleanup( );  
    21.  return;   
    22. }  
    23. SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);  //生成实例
    24.  
    25. SOCKADDR_IN addrSrv;  //需要连接的服务端地址
    26. addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  //ip地址
    27. addrSrv.sin_family=AF_INET;  //地址族
    28. addrSrv.sin_port=htons(6000);  //端口
    29. connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  //连接
    30.  
    31. char recvBuf[100];  
    32. recv(sockClient,recvBuf,100,0);  //接受服务端数据(同步模型下,造成线程阻塞)
    33. printf("%s\n",recvBuf);  
    34. send(sockClient,"This is lisi",strlen("This is lisi")+1,0);  
    35.  
    36. closesocket(sockClient);  //关闭socket
    37. WSACleanup();  //清理环境
    38.}  
      

  4.   

    main我也会写,就是不知道winmain里面该怎么写?应该在哪里创建套接字?哪里侦听?
      

  5.   

    孙鑫  那个MFC书   你download个,有你想要的。
      

  6.   

    winmain和main一样写就可以了,只是入口函数不同名字而已.
      

  7.   

        如果客户端是MFC的windows程序的话,你可以吧socket的生成代码写在Oninit函数内部。然后发送之类的动作写在回车键的监听或者写一个发送按钮,写在发送按钮的click事件底下。至于接收,如果你没想做多线程或者异步通讯的话,那就只能写一个接收按钮了,在接收按钮的click事件中接收(最好你能确定按下按钮的时候,另一端已经把数据发过来了,不然界面就卡死了)。
        至于服务器端的话,就写一个控制台程序吧,简单点。如果你想把服务器端也做界面的话,做完客户端你就能想到怎么写了,不是塞在Oninit事件下面,就写个按钮吧。
      

  8.   

    你不要MFC的光用SDK写恐怕会比较麻烦
    干嘛不用MFC
    直接用对话框弄不就好了
      

  9.   

    建议看孙鑫C++视频有关网络编程的那一讲,很详细.
    sunxin.org