创建一个基于UDP协议的简单传输系统

创建一个基于UDP协议的简单传输系统,我们可以编写一个发送端程序和一个接收端程序。UDP是无连接的,这意味着发送端可以直接发送数据报而不必事先建立连接。下面是一个简单的例子,展示如何在C语言中使用UDP进行数据传输。

首先,确保你的开发环境支持socket编程,并安装了必要的库。以下是一个简单的发送端和接收端的例子。

发送端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define BUF_SIZE 1024
#define PORT 9999

int main(int argc, char *argv[]) {
    if (argc < 3) {
        printf("Usage: %s <IP address> <message>\n", argv[0]);
        return 1;
    }

    char *ip = argv[1];
    char *msg = argv[2];

    int sock = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock == -1) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);
    if (inet_pton(AF_INET, ip, &serv_addr.sin_addr) <= 0) {
        perror("Invalid address/ Address not supported");
        exit(EXIT_FAILURE);
    }

    sendto(sock, msg, strlen(msg), MSG_CONFIRM, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
    printf("Message sent: %s\n", msg);

    close(sock);
    return 0;
}

接收端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define BUF_SIZE 1024
#define PORT 9999

int main(void) {
    int sock = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock == -1) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(PORT);

    if (bind(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        perror("Bind failed");
        exit(EXIT_FAILURE);
    }

    char buffer[BUF_SIZE];
    int len, addr_len;
    struct sockaddr_in cli_addr;
    addr_len = sizeof(cli_addr);

    printf("Waiting for message...\n");

    while (1) {
        memset(buffer, 0, BUF_SIZE);
        len = recvfrom(sock, buffer, BUF_SIZE, 0, (struct sockaddr *)&cli_addr, &addr_len);
        printf("Message received from %s:%d\n", inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port));
        printf("Received message: %s\n", buffer);
    }

    close(sock);
    return 0;
}

编译与运行

  1. 将上述两个程序保存为sender.creceiver.c
  2. 使用GCC编译它们:
    gcc -o sender sender.c
    gcc -o receiver receiver.c
    
  3. 先启动接收端:
    ./receiver
    
  4. 在另一个终端窗口中启动发送端,指定接收端的IP地址和消息:
    ./sender <IP地址> <消息>
    

确保接收端已经在运行,并且发送端正确指定了接收端的IP地址。这个例子中的端口号为9999,请确保该端口在接收端的计算机上可用。如果接收端和发送端不在同一台机器上,需要替换<IP地址>为你所使用的另一台机器的有效IP地址。

以上就是一个简单的UDP传输系统的示例代码。实际应用中,你可能需要增加错误处理机制、数据校验等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值