Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ udp

作者:天辰皇族   发布日期:2026-05-30   浏览:70

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <arpa/inet.h>

// 定义端口号和IP地址
#define PORT 8080
#define IP "127.0.0.1"

using namespace std;

// 发送端代码
void udp_client() {
    int sock;
    struct sockaddr_in servaddr;

    // 创建 UDP 套接字
    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }

    memset(&servaddr, 0, sizeof(servaddr));

    // 配置服务器地址信息
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(PORT);
    servaddr.sin_addr.s_addr = inet_addr(IP);

    char buffer[1024];
    cout << "Enter message: ";
    cin.getline(buffer, 1024);

    // 发送数据到服务器
    sendto(sock, (const char *)buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr *)&servaddr, sizeof(servaddr));
    cout << "Message sent." << endl;

    close(sock);
}

// 接收端代码
void udp_server() {
    int sock;
    char buffer[1024] = {0};
    struct sockaddr_in servaddr, cliaddr;

    // 创建 UDP 套接字
    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }

    memset(&servaddr, 0, sizeof(servaddr));
    memset(&cliaddr, 0, sizeof(cliaddr));

    // 配置服务器地址信息
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = INADDR_ANY;
    servaddr.sin_port = htons(PORT);

    // 绑定套接字到指定的端口
    if (bind(sock, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }

    int len, n;
    len = sizeof(cliaddr);  // len 是客户端地址的长度

    // 接收数据
    n = recvfrom(sock, (char *)buffer, 1024, MSG_WAITALL, (struct sockaddr *)&cliaddr, &len);
    buffer[n] = '\0';
    cout << "Client : " << buffer << endl;

    close(sock);
}

int main() {
    int choice;
    cout << "Choose option:\n1. Server\n2. Client\n";
    cin >> choice;

    if (choice == 1)
        udp_server();
    else if (choice == 2)
        udp_client();
    else
        cout << "Invalid choice" << endl;

    return 0;
}

解释说明:

  1. UDP 套接字创建

    • 使用 socket() 函数创建一个 UDP 套接字。AF_INET 表示使用 IPv4 地址族,SOCK_DGRAM 表示使用无连接的数据报套接字(即 UDP)。
  2. 配置地址信息

    • sockaddr_in 结构体用于存储 IP 地址和端口号。对于服务器端,INADDR_ANY 表示监听所有可用的网络接口。
  3. 绑定套接字

    • 服务器端需要调用 bind() 函数将套接字绑定到指定的端口上。
  4. 发送和接收数据

    • 客户端使用 sendto() 函数向服务器发送数据。
    • 服务器使用 recvfrom() 函数从客户端接收数据,并获取客户端的地址信息。
  5. 关闭套接字

    • 使用 close() 函数关闭套接字,释放资源。
  6. 主函数

    • 提供了一个简单的命令行界面,让用户选择是作为服务器还是客户端运行程序。

希望这段代码和解释对你有帮助!

上一篇:c++ 遍历vector

下一篇:c++并发编程

大家都在看

c++闭包

c++向上取整的代码

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++怎么输入字符串

c++ functional

c++框架代码

c++格式化字符串

c++ orm框架

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站