网络中UDP编程

网络

1.recvfrom

    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);
    功能:
        从套接字中接收数据
    参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址
        flags:属性 默认为0 
        src_addr:存放IP地址信息的空间首地址
        addrlen:存放接收到IP地址大小空间的首地址
    返回值:
        成功返回实际接收字节数
        失败返回-1 

修改虚拟机到桥接模式:

    点击"虚拟机"
    点击"设置"
    点击"网络适配器"
    选择"桥接模式"
    点击"确定"

将网卡桥接到无线网卡

    点击"编辑"
    点击"虚拟网络编辑器"
    点击"更改设置"

在Ubuntu中重启网络服务

    sudo /etc/init.d/networking restart  --- 重启网络

    ifconfig  ---  查看linux的网络ip地址

2.bind 

   int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
    功能:
        在套接字上绑定一个IP地址和端口号
    参数:
        sockfd:套接字文件描述符
        addr:绑定IP地址空间首地址
        addrlen:绑定IP地址的长度
    返回值:
        成功返回0 
        失败返回-1 


3.UDP编程:

    发端:socket (创建套接字文件)-> sendto(发端) -> close 
    收端:  socket(创建套接字文件)-> bind (定义收端的端口和ip)-> recvfrom(收端) ->                        close 

eg:发端代码   /    收端代码

#include"head.h"int main(void)                  //发端
{int sockfd = 0;struct sockaddr_in sendaddr;char tmpbuff[1024] = {0};   //储存发送内容的信息ssize_t nsize = 0;fgets(tmpbuff,sizeof(tmpbuff),stdin);sockfd = socket(AF_INET, SOCK_DGRAM, 0);   //数据报套接字        //创建一个用来通信的文件描述符if(sockfd == -1){perror("fail to socket");return -1;}sendaddr.sin_family = AF_INET; //协议族sendaddr.sin_port = htons(50000);   //端口号    //将本地字节序转换为网络的大端字节序   //要发送的主机端口号sendaddr.sin_addr.s_addr = inet_addr("192.168.1.182");   //ip    //将字符串IP地址转换内存中的ip地址    //要发送的主机ip号nsize = sendto(sockfd, tmpbuff, strlen(tmpbuff), 0, (struct sockaddr *)&sendaddr, sizeof(sendaddr)); //利用套接字向指定地址发送数据信息if (-1 == nsize){perror("fail to sendto");return -1;}printf("已发送个 %ld 字节1\n",nsize);close(sockfd);return 0;}
#include"head.h"int main(void)                                     //收端
{int sockfd = 0;int ret = 0;struct sockaddr_in recvaddr; struct sockaddr_in tmpaddr;          //存储收信息的主机的端口和ipchar tmpbuff[1024] = {0};ssize_t nsize = 0;socklen_t addrlen =  sizeof(tmpaddr);sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == sockfd){perror("fail to socket");return -1;}/* 绑定自己的端口和ip地址 */     //ip地址 用ifconfig 查看recvaddr.sin_family = AF_INET;recvaddr.sin_port = htons(30000);recvaddr.sin_addr.s_addr = inet_addr("192.168.1.176");ret = bind(sockfd, (struct sockaddr *)&recvaddr, sizeof(recvaddr));if(ret == -1){perror("fail to bind");return -1;}/* 接收的信息内容 */nsize = recvfrom(sockfd,tmpbuff,sizeof(tmpbuff),0,(struct sockaddr *)&tmpaddr,&addrlen);if (-1 == nsize){perror("fail to recvfrom");return -1;}printf("接收到了%ld个字节\n",nsize);printf("RECV ASCII FROM %s:%d>%s\n", inet_ntoa(tmpaddr.sin_addr), ntohs(tmpaddr.sin_port), tmpbuff);    //打印接收信息的主机的端口和ip地址close(sockfd);return 0;}

4.UDP需要注意的细节点:

    1.UDP是无连接,发端退出,收端没有任何影响
    2.UDP发送数据上限,最好不要超过1500个字节
    3.UDP是不安全不可靠的,连续且快速的传输数据容易产生数据丢失

5.wireshark  抓包工具

  操作流程:
    1.sudo wireshark
      打开wireshark抓包工具
    2.选择抓取数据包的网卡
      any
    3.执行通信的代码
    4.停止通信
    5.设定过滤条件
        ip.addr == IP地址 
        udp 
        tcp 
        udp.port == 端口

6.UDP包头长度:8个字节

    源端口号(2个字节)
    目的端口号(2个字节)
    长度(2个字节)
    校验和(2个字节)

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

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

相关文章

Java 数据结构之链表

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA null || headB null) return null;ListNode pA headA, pB headB;while (pA ! pB) {pA pA null ? headB : pA.next;pB pB null ? headA : pB.next;}return pA;} public ListNode rev…

Pytorch将数据(张量)写入视频

Pytorch将数据写入视频 1. 安装与报错解决2. torch.io程序3. cv2 img文件转视频参考资料 1. 安装与报错解决 安装 pip install PyAV报错问题1的解决 报错信息如下: ...tf2_py38\lib\site-packages\torchvision\io\video.py", line 41, in _check_av_availab…

解决Git中fatal: refusing to merge unrelated histories

我们在git新建项目的时候一般是先建一个远程仓库,然后本地与之关联,再将本地代码推到远程仓库就可以了,不过有可能返回以下错误: fatal: refusing to merge unrelated histories 这时需要在命令后增加以下命令即可 --allow-unr…

【Unity】【VR开发】如何避免按键冲突

【背景】 VR开发过程中,控制器按键冲突是常有的问题。比如握住手枪时发射子弹用的Trigger,瞬移用的也是Trigger,如何解决这种冲突呢? 【分析】 为了让同一个Trigger按键在不同场景下分别触发合适的动作,需增加判断逻辑来区分场景。具体到当前的问题,需要追加判断逻辑区…

数据库系列之:什么是 SAP HANA?

数据库系列之:什么是 SAP HANA? 一、什么是 SAP HANA?二、什么是内存数据库?三、SAP HANA 有多快?四、SAP HANA 的十大优势五、SAP HANA 架构六、数据库设计七、数据库管理八、应用开发九、高级分析十、数据虚拟化 一、…

通信(四)gRPC

gRPC 1. 简介2. C2.1 编译.proto生成.pb.h和.pb.cc服务器示例客户端示例 3. C#3.1 导入NuGet程序包编译.proto生成.cs和Grpc.cs示例 1. 简介 2. C 2.1 编译.proto生成.pb.h和.pb.cc grpc_cpp_plugin.exe生成编译时.proto自动生成 服务器示例 客户端示例 3. C# 3.1 导入N…

Linux添加虚拟卷

Linux添加虚拟卷 1.在服务器上安装lvm 使用LVM(Logical Volume Manager)来将多个物理磁盘挂载到同一个逻辑卷 2.创建 用pvcreate将设备初始化为物理卷 sudo pvcreate /dev/${目标设备} #例如 sudo pvcreate /dev/sdb sudo pvcreate /dev/sdc sudo p…

1-安装rabbitmq

rabbitmq官网: https://www.rabbitmq.com/docs/download 本机环境:mac,使用orbstack提供的docker 使用docker部署rabbitmq docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management 然后报错&#xf…

信息安全服务规范包括哪些方面

信息安全服务规范是确保信息系统安全稳定运行的重要指导原则和操作准则。在信息化高速发展的今天,信息安全已经成为国家、企业乃至个人不可忽视的重要议题。因此,制定和执行信息安全服务规范对于保障信息安全、维护社会秩序具有重要意义。 信息安全服务规…

[C/C++]_[初级]_[关于输出double浮点数精度的方法]

场景 在开发WTL/Win32程序时,绘制进度百分比,需要指定这个百分比包括小数点不超过5个字符,也就是除了小数点之外的数字个数最多只显示4个。已知可能出现的数值有1.1,1.1145,22.14… 用什么方式可以获取需要的字符串呢? 说明 绘…

VScode+Zotero+Latex文献引用联动

一、VScodeLatex联动 1、VScode的安装 2、texlive.iso安装 可以参考以下,也可以忽略所有直接一步一步默认安装 https://zhuanlan.zhihu.com/p/442308176 3、Vscode的插件安装:【latex workshop】 4、打开设置,搜索json,然后点击…

MIT 6.S081---Lab: Multithreading

Uthread: switching between threads (moderate) 修改uthread.c,在thread中新增context字段: 修改uthread.c,在thread_create函数中新增以下逻辑: 修改uthread.c中的thread_switch函数定义: 修改uthread.c中的th…

你不得不知道的Python AI库

Python是人工智能(AI)和机器学习(ML)领域中使用最广泛的编程语言之一,拥有丰富的库支持各种AI和ML任务。本文介绍一些经典的Python AI库。 1. NumPy 简介:NumPy(Numerical Python)…

Meta AI移动设备上部署LLM的新框架MobileLLM

Meta AI 研究团队推出的 MobileLLM 标志着大语言模型(LLMs)朝着模拟人类理解和生成自然语言迈出了革命性的一步。LLMs 在处理和分析大量数据集方面的能力已经显著影响了自动化客户服务、语言翻译和内容创作等多个领域。然而,由于传统 LLMs 在计算和存储资源方面的需求庞大,…

centos7中python3.10找不到openssl解决方案

如果有用其他方法安装了其他版本openssl,记得卸载其他的openssl,删除其他的openssl相关文件。 yum remove openssl* rm -rf ***下载最新版的openssl文件 按照官网安装方法安装openssl 官方安装地址https://docs.python.org/3/using/unix.html#on-linu…

代码随想录算法训练营第13天

239. 滑动窗口最大值 &#xff08;一刷至少需要理解思路&#xff09; 方法&#xff1a;暴力法 &#xff08;时间超出限制&#xff09; 注意&#xff1a; 代码&#xff1a; class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k…

目标检测YOLO实战应用案例100讲-基于数据融合的SAR图像中海上目标检测与跟踪

目录 前言 国内外研究现状 船舰目标监视资源 光学卫星 SAR卫星

数据分析方法(一)|认知数据

在进行数据分析时&#xff0c;很多人拿到数据之后没有头绪&#xff0c;在没有需求的情况下不知道从何做起&#xff0c;此时我们不妨先动起脑来理解数据。 分析数据之前&#xff0c;清晰的认识数据是非常重要的&#xff0c;通常我们可以从以下几个角度对数据进行深入了解&#x…

推荐5款极具效率的实用工具软件

​ 每次分享实用的软件,都会给人一种踏实和喜悦的感觉,这也是我热衷于搜集和推荐高效工具软件的原因。 1.个人日记软件——EDiary ​ EDiary是一款功能丰富的个人日记软件&#xff0c;用户可以在不联网的状态下使用&#xff0c;保护隐私。它支持日记、记事本、日历、事件提醒…

word如何实现不同章节显示不同页眉

一、问题描述 写论文时遇到如下情形&#xff0c;第二章页眉跟第一章一样&#xff0c;如下图 二、解决方法 在第二章前一页空白处&#xff0c;选择依次布局→分隔符→下一页&#xff0c;如下图 双击第二章页眉&#xff0c;进入页眉编辑状态&#xff0c;点击链接到前一节按钮&a…