windows socket 编程实例--TCP(2007-07-28 14:33)

来源:互联网 发布:淘宝网上卖东西会骗吗 编辑:程序博客网 时间:2024/05/22 14:58
 

简单地实现了一下监听,连接,信息收发.

一直都没解决的就是一个奇怪的连接问题......两次都是只要碰到会用上new或delete(直接或间接的)的地方全都出现连接错误......暂时先不管了......

真正做起项目来就没这么容易了, 暂时也只是熟悉了一下API的使用.

win sock 编程到此为止~next...

客户端向服务器发信息, 收到后打印一下,再回发. 客户端收到信息后打印.

---------------这是服务器的------------------

  1. #include "afxmt.h"
  2. #include "winsock2.h"
  3. #pragma     comment(lib,"WS2_32.LIB")
  4. int bufi;
  5. class mserver{
  6. private:
  7.       SOCKET ssock,csock;
  8.       sockaddr_in saddr,caddr;
  9.       int len;
  10.       char buf[4096];
  11. public:
  12.       mserver(){
  13.       }
  14.       mserver(int port,int maxclient){
  15.           saddr.sin_family=AF_INET;
  16.           saddr.sin_port=htons(port); 
  17.           saddr.sin_addr.s_addr=INADDR_ANY;
  18.           ssock=socket(AF_INET,SOCK_STREAM,0);
  19.           if(ssock==INVALID_SOCKET){
  20.               printf("build socket error/n");
  21.           }
  22.           if(bind(ssock,(struct sockaddr*)&saddr,sizeof(saddr))==SOCKET_ERROR){
  23.               printf("socket bind fail/n");
  24.           }
  25.           len=sizeof(caddr);
  26.       }
  27.       void close(){
  28.           closesocket(ssock);
  29.           closesocket(csock);
  30.       }
  31.       void beginlisten(){
  32.           if(listen(ssock,10)==SOCKET_ERROR){
  33.               printf("listen fail/n");
  34.           }
  35.       }
  36.       void maccept(){
  37.           sockaddr a;
  38.           csock=accept(ssock,(struct sockaddr*)&caddr,&len);
  39.           if(csock==INVALID_SOCKET){
  40.               printf("accept fail : %d/n",WSAGetLastError());
  41.             
  42.           }
  43.           printf("client from %s connected/n",inet_ntoa(caddr.sin_addr));
  44.       }
  45.       int receive(){
  46.           memset(buf,0,4096);
  47.           if(recv(csock,buf,4096,0)==SOCKET_ERROR){
  48.               return 0;
  49.           }
  50.           printf("message received : %s/n",buf);
  51.           send(csock,buf,4096,0);
  52.           return 1;
  53.       }
  54.     
  55. };
  56. int main()
  57. {
  58.       WSADATA wsaData;
  59.       if (WSAStartup(MAKEWORD(2,1),&wsaData)){
  60.            printf("Winsock initializing fail/n");
  61.            WSACleanup();
  62.            return 0;
  63.       }
  64.       mserver s(12345,10);
  65.       s.beginlisten();
  66.       s.maccept();
  67.       while(s.receive());
  68.       s.close();
  69.       WSACleanup();
  70.       return 0;
  71. }

-

 

----------------这是客户端的-------------------

  1. #include "stdio.h"
  2. #include "afxmt.h"
  3. #include "winsock2.h"
  4. #pragma     comment(lib,"WS2_32.LIB")
  5. class mclient{
  6. private:
  7.       SOCKET sock;
  8.       sockaddr_in saddr;
  9.       int len;
  10.       char buf[4096];
  11. public:
  12.       mclient(){
  13.           sock=socket(AF_INET,SOCK_STREAM,0);
  14.           len=sizeof(saddr);
  15.       }
  16.       bool mconnect(char* addr,int port){
  17.           saddr.sin_family=AF_INET;
  18.           saddr.sin_port=htons(port); 
  19.           saddr.sin_addr.s_addr=inet_addr(addr);
  20.           if(connect(sock,(struct sockaddr*)&saddr,len)==SOCKET_ERROR){
  21.               printf("connect fail : %d",WSAGetLastError());
  22.               return false;
  23.           }
  24.           return true;
  25.       }
  26.       void close(){
  27.           closesocket(sock);
  28.       }
  29.       void msend(char* mes){
  30.           send(sock,mes,strlen(mes),0);
  31.       }
  32.       bool receive(){
  33.           memset(buf,0,4096);
  34.           if(recv(sock,buf,4096,0)==SOCKET_ERROR){
  35.               return false;
  36.           }
  37.           else{
  38.               printf("received from server : %s/n",buf);
  39.               return true;
  40.           }
  41.       }
  42. };
  43. int main()
  44. {
  45.       WSADATA wsaData;
  46.       if (WSAStartup(MAKEWORD(2,1),&wsaData)){
  47.            printf("Winsock initializing fail/n");
  48.            WSACleanup();
  49.            return 0;
  50.       }
  51.       mclient a;
  52.       if(!a.mconnect("172.18.48.7",12345)){
  53.           return 0;
  54.       }
  55.       char buf[1024];
  56.       while(scanf("%s",buf)){
  57.           if(strcmp(buf,"quit")==0){
  58.               break;
  59.           }
  60.           a.msend(buf);
  61.           a.receive();
  62.       }
  63.       a.close();
  64.       WSACleanup();
  65.       return 0;
  66. }


原创粉丝点击