Linux中udp服务端,客户端的开发

UDP通信相关函数:

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);

函数说明:接收信息

  • 参数说明:
  • sockfd:套接字
  • buf:要接收的缓冲区
  • len:缓冲区的长度
  • flags:标志位,一般为0
  • src_addr:传出参数,发送方的地址
  • addrlen:发送方地址的长度

返回值:

成功返回读到的子节数

失败返回-1,并设置errno;

 ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);

函数说明:发送数据

  • sockfd:套接字
  • buf:要发送的缓冲区
  • len:缓冲区的长度
  • flags:标志位,一般为0
  • src_addr:传入参数,接收者的地址
  • addrlen:接收者地址的长度

udp服务端代码:

(相比于tcp服务端,不用liseten,accept)

而且udp服务端可以同时接收多个客户端发来的数据。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include <netinet/in.h>
#include<ctype.h>
int main()
{int cfd=socket(AF_INET,SOCK_DGRAM,0);if(cfd<0){perror("socket error");return -1;}struct sockaddr_in serv;//struct sockaddr_in cli;//定义一个客户端地址,用于接收发来数据的客户端地址
bzero(&serv,sizeof(serv));
bzero(&cli,sizeof(cli));serv.sin_family=AF_INET;serv.sin_port=htons(8888);inet_pton(AF_INET,"192.168.230.130",&serv.sin_addr.s_addr);bind(cfd,(struct sockaddr*)&serv,sizeof(serv));//绑定char buf[128];int n;int i=0;socklen_t len;while(1){len=sizeof(cli);memset(buf,0x00,sizeof(buf));n=recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&cli,&len);//接收数据,并说的发送方的地址,端口printf("port==[%d],n==[%d],buf==[%s]\n",ntohs(cli.sin_port),n,buf);for(i=0;i<n;i++){buf[i]=toupper(buf[i]);}sendto(cfd,buf,n,0,(struct sockaddr*)&cli,sizeof(cli));//发送数据}close(cfd);return 0;
}

我们可以使用 nc -u 命令进行检测;

udp客户端代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include <netinet/in.h>
int main()
{int cfd=socket(AF_INET,SOCK_DGRAM,0);if(cfd<0){perror("socket error");return 0;}char buf[128];struct sockaddr_in ser;bzero(&ser,sizeof(ser));ser. sin_family=AF_INET;ser.sin_port=htons(8888);
inet_pton(AF_INET,"192.168.230.130",&ser.sin_addr.s_addr);int n;while(1){memset(buf,0x00,sizeof(buf));
n=		read(STDIN_FILENO,buf,sizeof(buf));//从标准输入读数据sendto(cfd,buf,n,0,(struct sockaddr *)&ser,sizeof(ser));//向此地址发送数据memset(buf,0x00,sizeof(buf));n=recvfrom(cfd,buf,sizeof(buf),0,NULL,NULL);//不关心谁发的读数据,可以设为NULLprintf("n==[%d],buf==[%s]\n",n,buf);}close(cfd);return 0;
}

服务端结果:

客户端结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/536733.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

供应链金融新篇章:2001-2022年上市公司金融水平测算概览

数据说明&#xff1a;参考周兰和吴慧君&#xff08;2022&#xff09;的方法测算出2001-2022年上市公司供应链金融水平&#xff0c;供大家研究使用。数据来源&#xff1a;企业年报等。时间跨度&#xff1a;2001-2022年 数据范围&#xff1a;A股上市公司 数据指标&#xff1a;…

【热门话题】前端框架发展史

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 前端开发的历史演变引言第一章&#xff1a;起源与基础建设 - HTML与CSS时代1.1 …

SSA-LSTM多输入回归预测 | 樽海鞘优化算法-长短期神经网络 | Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

PMP项目管理认证如何进行报考呢

一、PMP 怎么报名&#xff1f;考什么内容&#xff1f; 1、PMP 报考条件 最核心的条件满足以下 2 个&#xff1a; ⭕本科毕业需要满 3 年时间&#xff0c;高中毕业满 5 年&#xff0c;或者年满 23 周岁&#xff0c;这三者满足一个即可。 比如&#xff0c;你本科毕业参加工作一…

如何在安卓端的SAP里配置打印机

1、转到 SPAD 事务&#xff08;“假脱机管理”屏幕&#xff09;。单击“设备/服务器”选项卡&#xff0c;输入输出设备的名称&#xff0c;然后点击显示按钮。 2、如果打印机已配置&#xff0c;它将显示设备属性、输出设备属性和纸盒信息的所有详细信息。如果输入新的打印机名称…

JavaWeb06-MVC和三层架构

目录 一、MVC模式 1.概述 2.好处 二、三层架构 1.概述 三、MVC与三层架构 四、练习 一、MVC模式 1.概述 MVC是一种分层开发的模式&#xff0c;其中 M&#xff1a;Model&#xff0c;业务模型&#xff0c;处理业务 V&#xff1a; View&#xff0c;视图&#xff0c;界面展…

PHP爬虫技术:利用simple_html_dom库分析汽车之家电动车参数

摘要/导言 本文旨在介绍如何利用PHP中的simple_html_dom库结合爬虫代理IP技术来高效采集和分析汽车之家网站的电动车参数。通过实际示例和详细说明&#xff0c;读者将了解如何实现数据分析和爬虫技术的结合应用&#xff0c;从而更好地理解和应用相关技术。 背景/引言 随着电…

LaTeX 目录标题取消(自定义)留白间距

默认的目录格式生成如下图&#xff0c;会发现“2 产品介绍”和“1.2 项目概述”中存在一段留白 通过在导言区定义以下代码即可自定义标题留白间距宽度 \usepackage[subfigure]{tocloft} \setlength{\cftbeforesecskip}{0.3em} 最终修改的效果如下

请编程输出无向无权图各个顶点的度 ← STL vector 模拟邻接表存图

【题目描述】 请利用 STL vector 模拟邻接表存图&#xff0c;编程输出无向无权图各个顶点的度。【输入样例】 5 6 1 3 2 1 1 4 2 3 3 4 5 1【输出样例】 4 2 3 2 1【算法分析】 本例利用 STL vector 模拟实现邻接表。代码参见&#xff1a;https://blog.csdn.net/hnjzsyjyj/arti…

顺序表后续以及通讯录项目

⽬录 1. 基于动态顺序表实现通讯录项⽬ 2. 顺序表经典算法 3. 顺序表的问题及思考 正⽂开始 继上一篇 1.动态顺序表的查找 这里挺简单的如找不到就返回一个负数&#xff0c;因为索引不可能是负的这里就用来代表找不到 下面是找不到的示例 最终代码可以优化成这样 2.动态…

数字孪生10个技术栈:数据清洗-数据的洗衣机

大家好&#xff0c;我是贝格前端工场&#xff0c;上期讲了数据传输的四个问题&#xff0c;本期继续分享数据采集后如何获得格式化的有效数据&#xff0c;那就是数据清洗&#xff0c;大家如有数字孪生或者数据可视化的需求&#xff0c;可以联络我们。 一、数据清洗含义和所需工…

(学习日记)2024.03.10:UCOSIII第十二节:使用优先级的流程 (持续更新)

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…