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.rhkb.cn/news/275449.html

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

相关文章

React Hooks 那些事儿

翻了波之前写的文章还有笔记&#xff0c;发现关于前端的文章并不多&#xff08;好歹也划水做过点前端开发&#xff09;。巧了&#xff0c;最近没什么好话题可写&#xff0c;做下 React Hooks 学习笔记吧。 Effect Hook 不得不说 Hook 的出现降低了我们在 React 中处理副作用&…

医药大数据案例分析

二、功能 &#xff08;1&#xff09;流量分析 &#xff08;2&#xff09;经营状态分析 &#xff08;3&#xff09;大数据可视化系统 配置tomcat vim /root/.bash_profile添加以下内容&#xff1a; export CATALINA_HOME/opt/tomcat export PATH P A T H : PATH: PATH:CATALIN…

构建社区服务平台的智慧架构

社区服务平台作为连接社区居民与各类服务资源的桥梁&#xff0c;承载着提升居民生活品质、促进社区发展的重要使命。本文将深入探讨社区服务平台的架构设计理念、核心功能和发展前景&#xff0c;助力读者了解如何构建智慧化、便捷化的社区服务平台&#xff0c;为社区居民提供更…

2024年:AI辅助研发领航新时代,颠覆性创新无处不在

随着时光荏苒&#xff0c;我们踏入了2024年——一个人工智能(AI)光芒四射的时代。从最初的逻辑推理程序到今日能自主创作艺术、编写复杂代码的智能体系&#xff0c;AI的发展可谓日新月异。 如今&#xff0c;它正以前所未有的速度和力度渗透到科技和工业研发的深层次领域&#…

LlamaGym登顶Hacker News!几行代码实现大模型Agents在线强化学习,你也能成为AI训练高手

"Agents"这个概念其实起源于强化学习&#xff0c;它们通过与环境的互动和接收奖励信号来学习。 但现在的大模型Agents并不支持在线学习&#xff0c;也就是说它们不能实时地通过强化来进行自我调整。 OpenAI推出了Gym&#xff0c;旨在简化和标准化强化学习环境。 然…

Springboot的配置文件及其优先级

配置文件 内置配置文件 配置文件的作用&#xff1a;修改SpringBoot自动配置的默认值&#xff1b;SpringBoot在底层都给我们自动配置好&#xff1b;SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff1a; application.propertiesapplication.yml 以上…

Prompt Learning:人工智能的新篇章

开篇&#xff1a;AI的进化之旅 想象一下&#xff0c;你正在和一位智能助手对话&#xff0c;它不仅理解你的问题&#xff0c;还能提出引导性的问题帮助你更深入地思考。这正是prompt learning的魔力所在——它让机器学习模型变得更加智能和互动。在这篇博客中&#xff0c;我们将…

[论文精读]Dynamic Coarse-to-Fine Learning for Oriented Tiny Object Detection

论文网址&#xff1a;[2304.08876] 用于定向微小目标检测的动态粗到细学习 (arxiv.org) 论文代码&#xff1a;https://github.com/ChaselTsui/mmrotate-dcfl 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&…

【ARM】MDK在programming algorithm界面添加FLM

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 解决在programming algorithm界面中无法添加想要的Flash编程算法的问题 2、 问题场景 在对于Debug进行Flash Download进行配置的时候&#xff0c;在programming algorithm界面中有对应的Flash编程算法。可以通过…

如何使用vue定义组件之——子组件调用父组件数据

1.定义父子模板template <div class"container"><my-father></my-father><my-father></my-father><my-father></my-father><!-- 此处无法调用子组件&#xff0c;子组件必须依赖于父组件进行展示 --><!-- <my-…

内存操作函数

memcpy mem--memory--内存 指向计算机内存 cpy-copy-拷贝 也就是内存拷贝 针对内存的函数 void* memcpy(void * destination,const void * source,size_t num) 把source的空间 复制到 destination的部分 长度是num 如果source 和 dest 的部分有重叠,会复制的结果是未定义的(建…

SpringBoot集成netty实现websocket通信

实现推送消息给指定的用户 一、依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://m…

蓝桥杯 2022 dp 背包

蓝桥杯 2022 dp 背包 题目链接&#xff1a; https://www.lanqiao.cn/problems/2186/learning/?subject_code1&group_code4&match_num13&match_flow2&origincup 题目&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std;#defi…

Docker拉取镜像存储不足

在使用Docker时&#xff0c;我们经常遇到一个问题&#xff0c;就是拉取镜像时提示存储空间不足。这是因为Docker在拉取镜像时需要将镜像文件下载到本地存储中&#xff0c;而有时本地存储空间不足以容纳完整的镜像文件。 本文将介绍一些解决这个问题的方法&#xff0c;并提供相…

这个学习Python的神仙网站,后悔没早点发现

Python 作为时下最流行的编程语言&#xff0c;很多初学者都将它作为自学编程的首选。不管是有编程经验的开发者&#xff0c;还是新手小白&#xff0c;在这个 AIGC 时代&#xff0c; Python 都可以带你探索新世界。 入门 Python 绝非难事&#xff0c;但如何让自己坚持学下去是如…

AI日报:一个新的“科技超级周期”正在出现

文章目录 技术周期预测可连接设备 技术周期 未来学家艾米韦伯表示&#xff0c;人工智能和其他两种通用技术将迎来一个新的“技术超级周期”&#xff0c;预计将在经济中创造“实质性和持续性”的变化。 她在SXSW 2024上表示&#xff0c;过去的科技超级周期是由通用技术引发的&…

【python】anaconda安装过程

【运行环境】Windows11 文章目录 一、anaconda下载二、anaconda安装三、环境变量配置四、测试环境变量是否配置成功五、总结 一、anaconda下载 1、输入网址“https://www.anaconda.com”进入Anaconda官网。 2、找到【Free Download】点击进入&#xff1a; 3、点击对应系统的…

YOLOv5目标检测学习(5):源码解析之:推理部分dectet.py

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、导入相关包与路径、模块配置1.1 导入相关的python包1.2 获取当前文件的相对路径1.3 加载自定义模块1.4 总结 二、执行主体的main函数所以执行推理代码&…

Acwing.4261 孤独的照片(贡献法)

题目 Farmer John 最近购入了 N 头新的奶牛&#xff0c;每头奶牛的品种是更赛牛&#xff08;Guernsey&#xff09;或荷斯坦牛&#xff08;Holstein&#xff09;之一。 奶牛目前排成一排&#xff0c;Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而&…

web:shrine

题目 点进题目后显示如下 查看源代码&#xff0c;查看可知为ssti注入。还设置了过滤的名单。 先可以测试一下是否存在ssti模板注入 payload \shrine\{{2-2}} 回显成功&#xff0c;存在ssti模板注入 绕过思路&#xff0c;代码里有过滤&#xff0c;会把()替换&#xff0c;这里…