Winsock入门编程示例代码

来源:互联网 发布:3DM看门狗卡顿优化补丁 编辑:程序博客网 时间:2024/05/16 15:49

Winsock入门,socket编程,网络

 

 

客户端代码:

[cpp] view plaincopy
  1. #include <stdio.h>  
  2. #include <string.h>  
  3. #include <winsock2.h>  
  4. #pragma comment(lib,"Ws2_32.lib")  
  5. #define BUFFER_SIZE 50  
  6. /*客户端代码  by ZZR 
  7. http://blog.csdn.net/zhengzhiren 
  8. */  
  9. int main()  
  10. {  
  11.     int err;  
  12.     SOCKET sClient;               
  13.     char ip[20];                        /*IP地址*/  
  14.     char buf[BUFFER_SIZE];                  /*数据发送缓冲区*/  
  15.     int port;                       /*端口*/  
  16.     WSADATA wsaD;  
  17.     struct sockaddr_in servaddr;    /*存放服务器端网络地址的结构*/  
  18.     printf("Please input target IP and Port(eg:127.0.0.1 5555):/n");  
  19.     scanf("%s%hu",ip,&port);  
  20.     memset(&servaddr,0,sizeof(servaddr));  
  21.     servaddr.sin_family = AF_INET;  
  22.     servaddr.sin_addr.s_addr = inet_addr(ip);  
  23.     servaddr.sin_port = htons(port);  
  24.     /*Winsock初始化*/  
  25.     err = WSAStartup(MAKEWORD(1,1),&wsaD);  
  26.     /*创建Socket*/  
  27.     if((sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == SOCKET_ERROR){          
  28.         err = WSAGetLastError();  
  29.         printf("Create socket error %d",err);  
  30.         return -1;  
  31.     }  
  32.     /*连接到服务器*/  
  33.     if(connect(sClient,(struct sockaddr *) &servaddr,sizeof(servaddr)) == SOCKET_ERROR){      
  34.         err = WSAGetLastError();  
  35.         printf("Failed to connect to server!%d/n",err);  
  36.         return -1;  
  37.     }  
  38.     printf("Connected to server %s/n",inet_ntoa(servaddr.sin_addr));  
  39.     while(1)  
  40.     {  
  41.         gets(buf);  
  42.         if (strcmp(buf,"quit")==0 || strcmp(buf,"exit")==0)  
  43.             break;  
  44.         send(sClient,buf,strlen(buf)+1,0) ;/*发送数据*/  
  45.     }  
  46.     closesocket(sClient);  
  47.     WSACleanup();  
  48.       
  49. }  

 

 

服务端代码:

[cpp] view plaincopy
  1. #include <stdio.h>  
  2. #include <winsock2.h>  
  3. #pragma comment(lib,"Ws2_32.lib")  
  4. //#pragma   comment(linker,   "/SUBSYSTEM:CONSOLE")  
  5. #define BUFFER_SIZE 500  
  6. /*服务端代码  by ZZR 
  7. http://blog.csdn.net/zhengzhiren 
  8. */  
  9. int main()  
  10. {  
  11.     int err;  
  12.     int len;  
  13.     SOCKET sListen;         /*监听套接字*/  
  14.     SOCKET sConnect;        /*用于建立连接的套接字*/  
  15.     WSADATA wsaD;  
  16.     struct sockaddr_in my_addr;  
  17.     u_short port;   /*监听端口*/  
  18.     char buf[BUFFER_SIZE];  
  19.     struct sockaddr_in addr;    /*客户机的网络地址*/  
  20.     int addrlen;                /*地址长度*/  
  21.     printf("Please input Port:/n");  
  22.     scanf("%hu",&port);  
  23.     err = WSAStartup(MAKEWORD(1,1),&wsaD);  /* 初始化Winsock */  
  24.     if((sListen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == SOCKET_ERROR){    /* 创建套接字s */  
  25.         err = WSAGetLastError();  
  26.         printf("%d socket error!",err);  
  27.         return -1;  
  28.     }  
  29.     memset(&my_addr,0,sizeof(my_addr));     /* 清空sockaddr结构 */  
  30.     my_addr.sin_family = AF_INET;  
  31.     my_addr.sin_port = htons(port);  
  32.     my_addr.sin_addr.s_addr = htonl(INADDR_ANY);  
  33.     if(bind(sListen,(struct sockaddr *) &my_addr,sizeof(my_addr)) == SOCKET_ERROR)  /* 绑定 */  
  34.     {  
  35.         err = WSAGetLastError();  
  36.         printf("Error:%d Failed to bind!/n",err);  
  37.         return -1;  
  38.     }  
  39.     if(listen(sListen,5) == SOCKET_ERROR)   /* 启动监听 */  
  40.     {  
  41.         err = WSAGetLastError();  
  42.         printf("Error:%d Failed to listen!/n",err);  
  43.         return -1;  
  44.     }  
  45.     printf("Listening on port %d/n",ntohs(my_addr.sin_port));  
  46.     addrlen = sizeof(addr);  
  47.     if((sConnect = accept(sListen,(struct sockaddr *) &addr,&addrlen)) != INVALID_SOCKET)  
  48.         printf("%s has connected to this server./n",inet_ntoa(addr.sin_addr));  
  49.     while(1){  
  50.         memset(buf,0,sizeof(buf));  
  51.         len = recv(sConnect,buf,sizeof(buf),0);     /*接收数据*/  
  52.         if (len > 0)  
  53.         {  
  54.             printf("%s",buf);             
  55.         }  
  56.         else if (len==0)  
  57.         {  
  58.             closesocket(sConnect);  
  59.             break;  
  60.         }  
  61.     }  
  62.     WSACleanup();  
  63.     return 0;  
  64. }  

原文地址:http://blog.csdn.net/ZhengZhiRen/article/details/4211690