当前位置:网站首页>UDP 基本通信框架
UDP 基本通信框架
2022-08-09 14:58:00 【iBlackAngel】
UDP 基本通信框架
概述
UDP(User Datagram Protocol)用户数据报协议。是一种无需建立连接就可以发送封装的 IP 数据包的方法。
UDP 开发基本框架:
服务端:
- socket
- bind
- recvfrom
客户端:
- socket
- sendto
服务端示例
文件名: udp_server.c
#include <sys/socket.h> /* included for socket */
#include <arpa/inet.h> /* included for sockaddr */
#include <stdbool.h> /* included for true */
#include <stdint.h> /* included for uint8_t */
#include <stdio.h> /* included for printf */
#include <string.h> /* included for memeset */
#include <unistd.h> /* included for close */
int main(int argc, char const *argv[])
{
/* socket */
int fd = socket(AF_INET, SOCK_DGRAM, 0);
/* bind */
struct sockaddr_in localaddr;
memset(&localaddr, 0x00, sizeof(localaddr));
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(50352);
localaddr.sin_addr.s_addr = inet_addr("0.0.0.0");
bind(fd, (const struct sockaddr *)&localaddr, sizeof(localaddr));
/* recvfrom */
uint8_t data[1024] = {
0x00};
struct sockaddr_in peeraddr;
socklen_t peerlen = sizeof(peeraddr);
ssize_t len = 0;
while (true) {
len = recvfrom(fd, data, sizeof(data), 0, (struct sockaddr *)&peeraddr,
&peerlen);
printf("recvfrom %s:%d with %ld bytes\n", inet_ntoa(peeraddr.sin_addr),
ntohs(peeraddr.sin_port), len);
}
close(fd);
return 0;
}
编译命令:
gcc -o server udp_server.c
客户端示例
文件名:udp_client.c
#include <sys/socket.h> /* included for socket */
#include <arpa/inet.h> /* included for sockaddr */
#include <stdbool.h> /* included for true */
#include <stdint.h> /* included for uint8_t */
#include <stdio.h> /* included for printf */
#include <string.h> /* included for memeset */
#include <unistd.h> /* included for close */
int main(int argc, char const *argv[])
{
/* socket */
int fd = socket(AF_INET, SOCK_DGRAM, 0);
uint8_t data[8] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
/* sendto */
struct sockaddr_in addr;
memset(&addr, 0x00, sizeof(addr));
addr.sin_family = AF_INET; // Address family
addr.sin_port = htons(50352);
addr.sin_addr.s_addr = inet_addr("10.133.5.170");
ssize_t len = sendto(fd, data, sizeof(data), 0, (const struct sockaddr *)&addr,
sizeof(addr));
close(fd);
return 0;
}
编译命令:
gcc -o client udp_client.c
边栏推荐
猜你喜欢
桥接模式下虚拟机连接不上网络的解决方法(WIFI)
hugging face tutorial - Chinese translation - model summary
MouStart指纹浏览器怎么防关联
人脸识别示例代码解析(一)——程序参数解析
【Postgraduate Work Weekly】(Week 7)
深入浅出最优化(4) 拟牛顿法
【工具使用】Keil5软件使用-基础使用篇
Stetman读paper小记:Backdoor Learning: A Survey(Yiming Li, Yong Jiang, Zhifeng Li, Shu-Tao Xia)
图解转置卷积原理
Retrofit2 初印象?
随机推荐
深入浅出最优化(3) 最速下降法与牛顿法
smote 采样
【深度学习】模型选择、欠/过拟合和感受野(三)
面试合集
Region实战SVG地图点击
鸡生蛋,蛋生鸡问题。JS顶级对象Function,Object关系
Dagger2从0基础使用,到单例注入的正确姿势
流式布局总结
cheerio根据多个class匹配
【深度学习】attention机制
PatchEmbed代码讲解记录
hugging face tutorial - Chinese translation - Loading pre-trained instances with AutoClass
VGG pytorch实现
【剑指 Offer II 091. 粉刷房子】
【深度学习】介绍六大类损失函数(九)
【Postgraduate Work Weekly】
抱抱脸(hugging face)教程-中文翻译-任务总结
Postgraduate Work Weekly (Week 6)
众所周知亚马逊是全球最大的在线电子商务公司。如今,它已成为全球商品种类最多的在线零售商,日活跃买家约为20-25亿。另一方面,也有大大小小的企业,但不是每个人都能赚到刀! 做网店的同学都知道,
pyspark.sql之实现collect_list的排序