• C++之UDP通信例程


    C++之UDP通信例程


    UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,它不像TCP那样提供可靠的数据传输服务,但具有简单、快速的特点。在C++中使用UDP协议进行通信,需要使用Socket编程。

    以下是一个简单的C++ UDP通信例程,包括UDP服务端和客户端

    UDP服务端:

    #include   
    #include   
    #include   
    #include   
    #include   
    #include   
    #include   
      
    #define MAX_BUFFER_SIZE 1024  
    #define PORT 8888  
      
    int main() {  
        int sockfd;  
        struct sockaddr_in server_addr, client_addr;  
        char buffer[MAX_BUFFER_SIZE];  
        int addrlen = sizeof(client_addr);  
          
        // 创建UDP套接字  
        if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {  
            perror("socket");  
            exit(EXIT_FAILURE);  
        }  
          
        // 初始化服务器地址信息  
        memset(&server_addr, 0, sizeof(server_addr));  
        server_addr.sin_family = AF_INET;  
        server_addr.sin_port = htons(PORT);  
        server_addr.sin_addr.s_addr = INADDR_ANY;  
          
        // 绑定服务器地址信息到套接字  
        if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {  
            perror("bind");  
            exit(EXIT_FAILURE);  
        }  
          
        std::cout << "Server is running on port " << PORT << std::endl;  
          
        while (true) {  
            // 接收客户端数据  
            int n = recvfrom(sockfd, (char *)buffer, MAX_BUFFER_SIZE, MSG_WAITALL, (struct sockaddr *)&client_addr, &addrlen);  
            buffer[n] = '\0';  
            std::cout << "Received message from client " << inet_ntoa(client_addr.sin_addr) << ": " << buffer << std::endl;  
        }  
          
        close(sockfd);  
        return 0;  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    UDP客户端:

    #include   
    #include   
    #include   
    #include   
    #include   
    #include   
    #include   
      
    #define MAX_BUFFER_SIZE 1024  
    #define PORT 8888  
    #define SERVER_IP "127.0.0.1"  
      
    int main() {  
        int sockfd;  
        struct sockaddr_in server_addr;  
        char buffer[MAX_BUFFER_SIZE];  
        int addrlen = sizeof(server_addr);  
          
        // 创建UDP套接字  
        if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {  
            perror("socket");  
            exit(EXIT_FAILURE);  
        }  
          
        // 初始化服务器地址信息  
        memset(&server_addr, 0, sizeof(server_addr));  
        server_addr.sin_family = AF_INET;  
        server_addr.sin_port = htons(PORT);  
        if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) == 0) {  
            perror("inet_pton");  
            exit(EXIT_FAILURE);  
        }  
          
        std::cout << "Client is running on port " << PORT << std::endl;  
        std::cout << "Please input message to send to server: ";  
        std::cin.getline(buffer, MAX_BUFFER_SIZE);  
        sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));  
        std::cout << "Message sent to server: " << buffer << std::endl;  
        close(sockfd);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    【机器人最短路径规划问题(栅格地图)】基于模拟退火算法求解
    【Pandas】优化读取文件内存占用过大的问题
    Nginx 压测方法论和性能指标
    echart的tooltip显示不同的单位
    【嵌入式】使用MultiButton开源库驱动按键并控制多级界面切换
    Day04-GET和POST请求
    Hadoop-sqoop
    红黑树的由来及其底层原理
    35、Java——一个案例学会Dao+service层对数据表的增删改查
    【Python 自动化】自媒体剪辑第一版·思路简述与技术方案
  • 原文地址:https://blog.csdn.net/techenliu/article/details/132815136