ZBLOG

C中在终端打印的东西太多,既不美观也耗性能,如何使用udp将其发送到一个127本地回环的ip的某一个端口中去,应该如何处理?请给出具体示例

在C语言中,你可以使用UDP协议将数据发送到本地回环IP(127.0.0.1)的特定端口。下面是一个简单的示例,展示了如何创建一个UDP客户端,将数据发送到指定的本地端口,并创建一个UDP服务器接收这些数据。

UDP服务器示例

首先,编写一个UDP服务器,它会监听某个端口并打印接收到的数据。

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

#define PORT 8080  // 监听的端口
#define BUF_SIZE 1024

int main() {
    int sockfd;
    struct sockaddr_in servaddr, cliaddr;
    char buffer[BUF_SIZE];
    socklen_t len = sizeof(cliaddr);

    // 创建socket
    if ((sockfd = 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_addr.s_addr = INADDR_ANY; // 接受任何地址
    servaddr.sin_port = htons(PORT);        // 设置端口号

    // 绑定socket与地址
    if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
        perror("Bind failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    printf("Server listening on port %d\n", PORT);

    while (1) {
        ssize_t n = recvfrom(sockfd, buffer, BUF_SIZE, MSG_WAITALL,
                             (struct sockaddr *)&cliaddr, &len);
        buffer[n] = '\0'; // 添加字符串结束符
        printf("Received: %s\n", buffer);
    }

    close(sockfd);
    return 0;
}

UDP客户端示例

然后,编写一个UDP客户端,它将信息发送到上面定义的服务器。

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

#define PORT 8080       // 要发送的目标端口
#define SERVER_IP "127.0.0.1" // 本地回环IP

int main() {
    int sockfd;
    struct sockaddr_in servaddr;
    
   char *message = "Hello from UDP client!"; 

   // 创建socket
   if ((sockfd = 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);           // 设置目标端口
   
   // 将IPv4地址从文本转换为二进制形式
   if (inet_pton(AF_INET, SERVER_IP, &servaddr.sin_addr) <= 0) {
       perror("Invalid address/ Address not supported");
       exit(EXIT_FAILURE);
   }
   
   while(1) {
       sendto(sockfd, message, strlen(message),
              MSG_CONFIRM, (const struct sockaddr *) &servaddr,
              sizeof(servaddr));
       printf("Message sent: %s\n", message);
       sleep(2); // 每2秒发送一次消息,可以根据需要调整频率。
   }

   close(sockfd);
   return 0;
}

使用方法

  1. 首先在终端中编译和运行UDP服务器:

    gcc udp_server.c -o udp_server
    ./udp_server
    
  2. 然后在另一个终端中编译和运行UDP客户端:

    gcc udp_client.c -o udp_client
    ./udp_client
    

这样,客户端会每两秒向本地的UDP服务器发送一条消息,服务器则会接收到并打印出来。你可以根据实际需求修改要发送的数据内容或传输的频率。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=7064

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?