UDP server 和UDP client说明

UDP server 和UDP client说明




一、UDP server是什么?

UDP server,是指在UDP的基础上不验证来源IP,收到UDP数据包后,将目标IP改成数据来源IP,类似TCP client。
在此模式下,模块默认记录一个目标IP,当串口有数据时,向记录的IP发送数据,同时,模块处于服务器的地位,接收网络中发给模块的数据包,并随时调整目标IP为数据来源的IP,适合于多个IP对应模块的工作方式。使用计算机端的程序和UDP模式完全一样,不需要任何更改。

二、UDP client是什么?

UDP client ,是指模块通电后监听设置的端口,不主动建立链接,当串口设备向模块串口发送数据时,串口服务器 将数据发送到设定的目标IP和端口上,PC端可以将目标IP和端口设置为模块的自身IP模块的自身端口,然后PC端发送数据,可以将数据发送到模块的串口端。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UDP Server: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define BUF_SIZE 1024 #define PORT 8888 int main() { int sockfd; struct sockaddr_in server_addr, client_addr; socklen_t client_len; char buf[BUF_SIZE]; bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); exit(EXIT_FAILURE); } if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("bind"); exit(EXIT_FAILURE); } while (1) { memset(buf, 0, BUF_SIZE); client_len = sizeof(client_addr); if (recvfrom(sockfd, buf, BUF_SIZE, 0, (struct sockaddr *)&client_addr, &client_len) < 0) { perror("recvfrom"); continue; } printf("Received message from %s:%d: %s\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buf); } close(sockfd); return 0; } ``` UDP Client: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define BUF_SIZE 1024 #define SERVER_IP "127.0.0.1" #define PORT 8888 int main() { int sockfd; struct sockaddr_in server_addr; char buf[BUF_SIZE]; bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); server_addr.sin_port = htons(PORT); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); exit(EXIT_FAILURE); } while (1) { printf("Enter message: "); fgets(buf, BUF_SIZE, stdin); if (sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("sendto"); continue; } printf("Sent message to server: %s\n", buf); } close(sockfd); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值