打印
[资料干货]

UDP是什么?怎么用,C语言代码举例

[复制链接]
26|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丙丁先生|  楼主 | 2024-10-12 06:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
UDP(用户数据报协议)是一种无连接的传输层协议,它不保证数据包的可靠传输。与TCP相比,UDP具有更低的延迟和开销,因为它不需要建立连接、确认和重传机制。UDP适用于对实时性要求较高的应用,如音视频流、在线游戏等。

在C语言中,可以使用套接字编程来实现UDP通信。以下是一个简单的UDP服务器和客户端的示例:

### UDP服务器代码:

```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define PORT 8080
#define MAXLINE 1024

int main() {
    int sockfd;
    char buffer[MAXLINE];
    struct sockaddr_in servaddr, cliaddr;

    // 创建套接字
    if ((sockfd = 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; // IPv4
    servaddr.sin_addr.s_addr = INADDR_ANY;
    servaddr.sin_port = htons(PORT);

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

    int len, n;
    len = sizeof(cliaddr); // len是值/结果

    n = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL, (struct sockaddr *)&cliaddr, &len);
    buffer[n] = '\0';
    printf("Client : %s
", buffer);

    sendto(sockfd, (const char *)"Hello from server", strlen("Hello from server"), MSG_CONFIRM, (const struct sockaddr *) &cliaddr, len);

    close(sockfd);
    return 0;
}
```

### UDP客户端代码:

```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define PORT 8080
#define MAXLINE 1024

int main() {
    int sockfd;
    char buffer[MAXLINE];
    struct sockaddr_in servaddr;
    struct hostent *server;

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

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

    server = gethostbyname("localhost");
    if (server == NULL) {
        fprintf(stderr, "ERROR, no such host
");
        exit(0);
    }
    bcopy((char *)server->h_addr, (char *)&servaddr.sin_addr.s_addr, server->h_length);

    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(PORT);

    // 发送数据
    strcpy(buffer, "Hello from client");
    sendto(sockfd, (const char *)buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr *) &servaddr, sizeof(servaddr));
    printf("Hello message sent.
");

    // 接收数据
    int n;
    n = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL, (struct sockaddr *) &servaddr, NULL);
    buffer[n] = '\0';
    printf("Server : %s
", buffer);

    close(sockfd);
    return 0;
}
```

这两个示例展示了如何在C语言中使用UDP进行简单的客户端-服务器通信。服务器绑定到一个端口并等待客户端的消息,客户端向服务器发送消息并接收回复。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

441

主题

1432

帖子

4

粉丝