初探WinSock,敲了两段示例

  服务端:

Code:
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <errno.h>  
  4. #include <string.h>  
  5. #include <winsock2.h>  
  6.   
  7. #pragma comment (lib, "ws2_32.lib")  
  8.   
  9. #define SERVER_PORT 3333                        ///< 服务器端口  
  10. #define BACKLOG 10                              ///< 最大连接数  
  11. #define TCPIP_MODE AF_INET  
  12.   
  13. typedef int HSOCKET;  
  14.   
  15. int main()  
  16. {  
  17.     int sin_size;  
  18.     WORD SockVersion = MAKEWORD(2, 2);  
  19.     WSADATA wsadata;  
  20.     HSOCKET hServer, hClient;  
  21.     sockaddr_in my_addr, remote_addr;  
  22.     char *msg = "Hello World";  
  23.   
  24.     if(0 != WSAStartup(SockVersion, &wsadata))  
  25.     {  
  26.         printf("Socket启动错误!/n");  
  27.         WSACleanup();  
  28.         exit(1);  
  29.     }  
  30.   
  31.     printf("Socket启动成功.../n");  
  32.   
  33.     if(-1 == (hServer = socket(TCPIP_MODE, SOCK_STREAM, 0)))  
  34.     {  
  35.         printf("Socket创建错误!/n");  
  36.         WSACleanup();  
  37.         exit(1);  
  38.     }  
  39.   
  40.     printf("Socket创建成功.../n");  
  41.   
  42.     my_addr.sin_family = TCPIP_MODE;  
  43.     my_addr.sin_addr.s_addr = INADDR_ANY;  
  44.     my_addr.sin_port = htons(SERVER_PORT);  
  45.     memset(my_addr.sin_zero, 0, sizeof(my_addr.sin_zero));  
  46.   
  47.     if(-1 == bind(hServer, (sockaddr *)&my_addr, sizeof(sockaddr)))  
  48.     {  
  49.         printf("Bind错误!/n");  
  50.         WSACleanup();  
  51.         exit(1);  
  52.     }  
  53.   
  54.     printf("端口绑定成功.../n");  
  55.   
  56.     if(-1 == (listen(hServer, BACKLOG)))  
  57.     {  
  58.         printf("Listen错误!/n");  
  59.         WSACleanup();  
  60.         exit(1);  
  61.     }  
  62.   
  63.     printf("Socket监听成功.../n");  
  64.   
  65.     while(true)  
  66.     {  
  67.         sin_size = sizeof(sockaddr_in);  
  68.         if(-1 == (hClient = accept(hServer, (sockaddr *)&remote_addr, &sin_size)))  
  69.         {  
  70.             printf("Accept错误!/n");  
  71.             continue;  
  72.         }  
  73.   
  74.         printf("收到客户端请求 | ");  
  75.   
  76.         if(-1 == send(hClient, msg, strlen(msg), 0))  
  77.         {  
  78.             printf("Send错误!/n");  
  79.             closesocket(hClient);  
  80.             WSACleanup();  
  81.             exit(1);  
  82.         }  
  83.   
  84.         printf("信息发送成功.../n");  
  85.   
  86.         closesocket(hClient);  
  87.     }  
  88.   
  89.     WSACleanup();  
  90.     return 0;  
  91. }  

 

客户端:

Code:
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <errno.h>  
  4. #include <string.h>  
  5. #include <winsock2.h>  
  6. #define SERVER_PORT 3333                    ///< 服务器端口  
  7. #define MAXDATASIZE 100                     ///< 接受信息最大长度  
  8. #define GetHostByName gethostbyname  
  9. #define TCPIP_MODE AF_INET  
  10.   
  11. #pragma comment (lib, "ws2_32.lib")  
  12.   
  13. typedef int HSOCKET;  
  14.   
  15. int main(int argc, char *argv[])  
  16. {  
  17.     WORD SocketVersion = MAKEWORD(2, 2);    ///< Sock版本  
  18.     WSAData wd;  
  19.     HSOCKET hClient[20];                    ///< 连接主机的套接字  
  20.     int RecvBytes;                          ///< 接受消息的长度  
  21.     char buf[MAXDATASIZE] = { 0 };          ///< 接受消息缓冲区  
  22.     hostent *host;                          ///< 主机信息  
  23.     sockaddr_in server_addr;                ///< 主机地址  
  24.   
  25.     /** 启动Sock */  
  26.     if(0 != WSAStartup(SocketVersion, &wd))  
  27.     {  
  28.         printf("Socket启动错误!/n");  
  29.         exit(1);  
  30.     }  
  31.   
  32.     printf("Socket启动成功.../n");  
  33.   
  34.     if(argc < 2)  
  35.     {  
  36.         WSACleanup();  
  37.         printf("错误的参数个数!/n");  
  38.         exit(1);  
  39.     }  
  40.   
  41.     /** 获取主机信息 */  
  42.     if(NULL == (host = GetHostByName(argv[1])))  
  43.     {  
  44.         WSACleanup();  
  45.         printf("主机地址获取错误!/n");  
  46.         exit(1);  
  47.     }  
  48.   
  49.     printf("主机 %s 信息获取成功.../n", argv[1]);  
  50.   
  51.     /** 创建Sock */  
  52.     for(int i = 0; i < 20; i++)  
  53.         if(-1 == (hClient[i] = socket(TCPIP_MODE, SOCK_STREAM, 0)))  
  54.         {  
  55.             closesocket(hClient[i]);  
  56.             WSACleanup();  
  57.             printf("Socket创建错误!/n");  
  58.             exit(1);  
  59.         }  
  60.   
  61.     printf("Socket创建成功.../n");  
  62.   
  63.     /** 初始化主机地址信息 */  
  64.     server_addr.sin_family = TCPIP_MODE;  
  65.     server_addr.sin_port = htons(SERVER_PORT);  
  66.     server_addr.sin_addr = *((in_addr *)host->h_addr);  
  67.     memset(server_addr.sin_zero, 0, sizeof(server_addr.sin_zero));  
  68.   
  69.     /** 连接主机 */  
  70.   
  71.     for(int i = 0; i < 20; i++)  
  72.         if(-1 == connect(hClient[i], (sockaddr *)&server_addr, sizeof(sockaddr_in)))  
  73.         {  
  74.             closesocket(hClient[i]);  
  75.             WSACleanup();  
  76.             printf("连接主机错误!/n");  
  77.             exit(1);  
  78.         }  
  79.   
  80.     printf("连接主机成功.../n");  
  81.   
  82.     /** 接受消息 */  
  83.     for(int i = 0; i < 20; i++)  
  84.     {  
  85.         if(-1 == (RecvBytes = recv(hClient[i], buf, MAXDATASIZE, 0)))  
  86.         {  
  87.             closesocket(hClient[i]);  
  88.             WSACleanup();  
  89.             printf("收取信息错误!/n");  
  90.             exit(1);  
  91.         }  
  92.   
  93.         /** 输出消息 */  
  94.         buf[RecvBytes] = '/0';  
  95.         printf("收取信息成功: %s.../n", buf);  
  96.   
  97.         /** 善后 */  
  98.         closesocket(hClient[i]);  
  99.     }  
  100.     WSACleanup();  
  101.   
  102.     return 0;  
  103. }  
  104.  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值