• C++ Socket UDP "Hello World!"


    这是C++ SOCKET网络程序中的C/S结构之UDP "Hello World !",共两个控制台工程:

    [cpp] view plain copy
     
     print?
    1. //////////////////////////////////////////////////////////////////////////  
    2. // UDPServer.cpp  
    3.   
    4. #include <stdio.h>  
    5. #include <WINSOCK2.H>  
    6.   
    7. #pragma comment(lib,"WS2_32.lib")  
    8. #define BUF_SIZE    64  
    9.   
    10. int main(void)  
    11. {  
    12.     WSADATA wsd;  
    13.     SOCKET  s;  
    14.     int     nRet;  
    15.   
    16.     // 初始化套接字动态库  
    17.     if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)  
    18.     {  
    19.         printf("WSAStartup failed !/n");  
    20.         return 1;  
    21.     }  
    22.   
    23.     // 创建套接字  
    24.     s = socket(AF_INET,SOCK_DGRAM,0);  
    25.     if(s == INVALID_SOCKET)  
    26.     {  
    27.         printf("socket() failed ,Error Code:%d/n",WSAGetLastError());  
    28.         WSACleanup();  
    29.         return 1;  
    30.     }  
    31.   
    32.     SOCKET      socketSrv = socket(AF_INET,SOCK_DGRAM,0);  
    33.     SOCKADDR_IN addrSrv;  
    34.     SOCKADDR_IN addrClient;  
    35.     char        buf[BUF_SIZE];  
    36.     int         len = sizeof(SOCKADDR);  
    37.   
    38.     // 设置服务器地址  
    39.     ZeroMemory(buf,BUF_SIZE);  
    40.     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
    41.     addrSrv.sin_family = AF_INET;  
    42.     addrSrv.sin_port = htons(5000);  
    43.   
    44.     // 绑定套接字  
    45.     nRet = bind(socketSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
    46.     if(SOCKET_ERROR == nRet)     
    47.     {     
    48.         printf("bind failed !/n");     
    49.         closesocket(s);     
    50.         WSACleanup();     
    51.         return -1;     
    52.     }  
    53.   
    54.     // 从客户端接收数据  
    55.     nRet = recvfrom(socketSrv,buf,BUF_SIZE,0,(SOCKADDR*)&addrClient,&len);  
    56.     if(SOCKET_ERROR == nRet)     
    57.     {     
    58.         printf("recvfrom failed !/n");     
    59.         closesocket(s);     
    60.         WSACleanup();     
    61.         return -1;     
    62.     }  
    63.     // 打印来自客户端发送来的数据  
    64.     printf("Recv From Client:%s/n",buf);  
    65.   
    66.     // 向客户端发送数据  
    67.     sendto(socketSrv,"UDP Hello World !",sizeof("UDP Hello World !"),0,(SOCKADDR*)&addrClient,len);  
    68.     closesocket(s);  
    69.     WSACleanup();  
    70.     return 0;  
    71. }  
    [cpp] view plain copy
     
     print?
    1. //////////////////////////////////////////////////////////////////////////  
    2. // UDPClient.cpp  
    3.   
    4. #include <stdio.h>  
    5. #include <WINSOCK2.H>  
    6.   
    7. #pragma comment(lib,"WS2_32.lib")  
    8. #define BUF_SIZE    64  
    9.   
    10. int main(void)  
    11. {  
    12.     WSADATA wsd;      
    13.     SOCKET  s;  
    14.   
    15.     // 初始化套接字动态库  
    16.     if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)  
    17.     {  
    18.         printf("WSAStartup failed !/n");  
    19.         return 1;  
    20.     }  
    21.   
    22.     // 创建套接字  
    23.     s = socket(AF_INET,SOCK_DGRAM,0);  
    24.     if(s == INVALID_SOCKET)  
    25.     {  
    26.         printf("socket() failed, Error Code:%d/n",WSAGetLastError());  
    27.         WSACleanup();  
    28.         return 1;  
    29.     }  
    30.   
    31.     char        buf[BUF_SIZE];  // 接受数据  
    32.     SOCKADDR_IN servAddr;       // 服务器套接字地址  
    33.     SOCKET      sockClient = socket(AF_INET,SOCK_DGRAM,0);  
    34.     int         nRet;  
    35.   
    36.     ZeroMemory(buf,BUF_SIZE);  
    37.     strcpy(buf,"UDP Hello World !");  
    38.   
    39.     // 设置服务器地址  
    40.     servAddr.sin_family = AF_INET;  
    41.     servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.254");  
    42.     servAddr.sin_port = htons(5000);  
    43.   
    44.     // 向服务器发送数据  
    45.     int nServAddLen = sizeof(servAddr);  
    46.     if(sendto(sockClient,buf,BUF_SIZE,0,(sockaddr *)&servAddr,nServAddLen) == SOCKET_ERROR)  
    47.     {  
    48.         printf("recvfrom() failed:%d/n",WSAGetLastError());  
    49.         closesocket(s);  
    50.         WSACleanup();  
    51.         return 1;  
    52.     }  
    53.     nRet = recvfrom(sockClient,buf,BUF_SIZE,0,(sockaddr *)&servAddr,&nServAddLen);  
    54.     if(SOCKET_ERROR == nRet)     
    55.     {     
    56.         printf("recvfrom failed !/n");     
    57.         closesocket(s);     
    58.         WSACleanup();     
    59.         return -1;     
    60.     }  
    61.   
    62.     // 打印来自服务端发送来的数据  
    63.     printf("Recv From Server:%s/n",buf);  
    64.     closesocket(s);  
    65.     WSACleanup();  
    66.     return 0;  
    67. }  

    程序运行效果:

    UDP Hello World!

    源代码下载地址:

    http://www.rayfile.com/files/733c832e-a2d8-11de-a838-0014221b798a/

    http://blog.csdn.net/wangningyu/article/details/4560835

  • 相关阅读:
    jmeter-CSV Data Set Config
    阿里云linux安装jmeter并进行压测
    HTTP基本认证和JWT鉴权
    Jmeter处理cookie
    Jmeter中一些概念的理解——90%响应时间、事务、并发
    Jmeter使用吞吐量控制器实现不同的用户操纵不同的业务
    Jmeter实现从csv文件中随机读取数据
    Jmeter解决乱码问题
    Docker简介
    docker-compose搭建wordpress[转]
  • 原文地址:https://www.cnblogs.com/findumars/p/5928712.html
Copyright © 2020-2023  润新知