24-LINUX-UDP网络连接

一UDP协议特点

        TCP 协议提供的是:面向连接、可靠的、字节流服务。使用 TCP 协议通信的双发必须
先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理
连接的状态和连接上数据的传输。TCP 连接是全双工的,双方的数据可以通过一个连接进行
读写。完成数据交换之后,通信双方都必须断开连接以释放系统资源。 使用 tcpdump 可以抓包观察 TCP 连接的建立与关闭。该命令需要管理员权限,格式如 下(假设两个测试用的主机 IP 地址为 192.168.43.214 和 192.168.43.160 ) :
        三次握手发生在客户端执行 connect()的时候,该方法返回成功,则说明三次握手已建立。        

二.编程流程

        socket()用来创建套接字,使用 udp 协议时,选择数据报服务 SOCK_DGRAM。sendto()
用来发送数据,由于 UDP 是无连接的,每次发送数据都需要指定对端的地址(IP 和端
口)。recvfrom()接收数据,每次都需要传给该方法一个地址结构来存放发送端的地址。
recvfrom()可以接收所有客户端发送给当前应用程序的数据,并不是只能接收某一个客
户端的数据。
        
        UDP数据报服务中,发送端每一次执行写操作,UDP模块就将其封装成一个UDP数据报并发送,接收端必须及时对每一个数据包进行读操作,否侧就会丢包。如果用户没有足够的缓冲区来读取UDP数据报,数据报会被截断,下一次读取直接读取下一个数据报。

三示例代码

udp_ser.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

int main()
{
        int sockfd = socket(AF_INET,SOCK_DGRAM,0);
        if(sockfd ==-1)
        {
                exit(1);
        }
        struct sockaddr_in saddr,caddr;
        memset(&saddr,0,sizeof(saddr));
        saddr.sin_family =AF_INET;
        saddr.sin_port =htons(6000);
        saddr.sin_addr.s_addr =inet_addr("127.0.0.1");

        int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
        if(res == -1)
        {
                printf("bind err\n");
                exit(1);
        }

        while(1)
        {
                int len = sizeof(caddr);
                char buff[128]={0};
                recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len);
                printf("buff=%s\n",buff);

                sendto(sockfd,"ok",2,0,(struct sockaddr*)&caddr,sizeof(caddr));
        }

        close(sockfd);
}

udp_cli.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

int main()
{
        int sockfd = socket(AF_INET,SOCK_DGRAM,0);//UDP
        if(sockfd == -1)
        {
                exit(1);
        }

        struct sockaddr_in saddr;
        memset(&saddr,0,sizeof(saddr));
        saddr.sin_family = AF_INET;
        saddr.sin_port =htons(6000);
        saddr.sin_addr.s_addr =inet_addr("127.0.0.1");

        while(1)
        {
                printf("intput: \n");
                char buff[128] = {9};
                fgets(buff,128,stdin);

                if(strncmp(buff,"end",3)==0)
                {
                        break;
                }

                sendto(sockfd,buff,strlen(buff)-1,0,(struct sockaddr*)&saddr,sizeof(saddr));
                memset(buff,0,128);
                int len = sizeof(saddr);
                recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);
                printf("buff=%s\n",buff);
        }
        close(sockfd);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Controlnet作者放出新的大招 IC-Light,可以操控图像生成时的光照,对内容主体重新打光生成符合新背景环境光照的图片

IC-Light代表Impose Constant Light,是一个控制图像照明的项目。可以操控图像生成时的光照&#xff0c;对内容主体重新打光生成符合新背景环境光照的图片。这下商品图合成这种需要最大程度保持原有主体 ID 需求的最大的问题解决了。 目前&#xff0c;已经发布了两种类型的模型…

多线程、进程、线程五种状态、synchronized、volatile、Lock、CAS、死锁、ThreadLocal

1、并发编程 并发编程三要素 原子性&#xff1a;只一个操作要么全部成功&#xff0c;要么全部失败可见性&#xff1a;一个线程对共享变量的修改&#xff0c;其他线程能够立刻看到有序性&#xff1a;程序执行的顺序按照代码的先后顺序执行 synchronized&#xff0c;Lock解决原…

C++ 网络编程

一、Reactor 网络编程模型 reactor 是一个事件处理模型。网络处理:因为用户层并不知道 IO 什么时候就绪,所以将对 IO 的处理转化为对事件的处理。网络模型构成: 非阻塞 IO:操作 IO,如果 IO 未就绪,IO 函数会立刻返回。IO 多路复用:检测多路 IO 是否就绪。工作流程: 注册…

【设计模式】JAVA Design Patterns——Bridge(桥接模式)

&#x1f50d;目的 将抽象与其实现分离&#xff0c;以便二者可以独立变化。 &#x1f50d;解释 真实世界例子 考虑一下你拥有一种具有不同附魔的武器&#xff0c;并且应该允许将具有不同附魔的不同武器混合使用。 你会怎么做&#xff1f; 为每个附魔创建每种武器的多个副本&…

每周刷题第三期

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏&#xff1a;Python 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 题目一&#xff1a;环形链表 题目二&#xff1a;删除有序数组中的重复项 题目三&#xff1a;有效的括号 题…

【C语言】程序员自我修养之文件操作

【C语言】程序员自我修养之文件操作 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C语言学习之路 文章目录 【C语言】程序员自我修养之文件操作前言一.文件介绍1.1为什么使用文件1.2文件分类1.3二进制文件和文本文件 二.文件的打开和关闭2.…

docker-compose Install homer

homer前言 一个非常简单的静态主页,为您的服务器保持您的服务在手,从一个简单的yaml配置文件。 前提要求 安装 docker docker-compose 参考创建一键安装homer 脚本 homer安装位置/homerhomer 脚本位置/homer/assetshomer logo 图标/home/assets/iconshomer 端口80homer 颜色…

连续三次拒绝饭局的邀请,不会在有人请你吃饭!

人们对于饭局的态度各有不同&#xff0c;有的认为饭局纯属浪费时间&#xff0c;还有各种套路&#xff0c;应该尽量少参加。也有的人认为饭局是沟通感情的平台&#xff0c;有这样的机会应该尽量去参与。不管是否喜欢饭局&#xff0c;但总要时不时去参加的。如果你连续三次拒绝饭…

文心智能体应用示例:职场反PUA专家的诞生

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

JAVA开发 基于最长公共子序列来计算两个字符串之间的重复率

计算两个字符串之间的重复率 最长公共子序列实现代码 最长公共子序列 基于最长公共子序列&#xff08;Longest Common Subsequence, LCS&#xff09;的重复率的中心逻辑是首先找到两个或多个序列中同时出现的、不一定连续但保持相对顺序的最长子序列&#xff0c;然后计算这个最…

知识获取概述

文章目录 知识获取研究现状技术发展趋势 知识图谱主要技术包括知识获取、知识表示、知识存储、知识建模、 知识融合、知识理解、知识运维等七个方面&#xff0c;通过面向结构化、半结构化和非结构化数据构建知识图谱为不同领域的应用提供支持&#xff0c;具体的技术架构图如下图…

全栈安全 为云而生 | 亚信安全信舱ForCloud全新品牌重磅发布

5月18日&#xff0c;亚信安全云安全全新品牌ForCloud正式发布。基于“全栈安全 为云而生”的创新理念&#xff0c;亚信安全云安全完成全新、全面、全栈升级。ForCloud的发布仪式在C3安全大会“云领未来&#xff1a;全栈一体化”云安全论坛上隆重举办&#xff0c;同时亚信安全还…

许冉直播不治本,京东需要刘强东

图片&#xff5c;影视剧《纸牌屋》剧照 ©自象限原创 作者丨艾AA 编辑丨薛黎 这届618&#xff0c;消费者的热情还未显现&#xff0c;商家的怒火先爆发了。 5月21日京东618开幕次日&#xff0c;多家图书社抵制618图书大促登上了热搜。此次争议与去年双十一京东采销与电…

执行sql脚本——kettle开发03

一、转换对象的优先级 kettle中转换和作业的执行顺序&#xff1a; 1、一个作业内的转换&#xff0c;是顺序执行的。 2、一个转换内的步骤是并行执行的。 3、作业内不支持事务&#xff0c;转换内支持事务。 根据业务需要&#xff0c;通常需要在转换内顺序执行&#xff0c;小技巧…

Java进阶-SpringCloud使用BeanUtil工具类简化对象之间的属性复制和操作

在Java编程中&#xff0c;BeanUtil工具类是一种强大且便捷的工具&#xff0c;用于简化对象之间的属性复制和操作。本文将介绍BeanUtil的基本功能&#xff0c;通过详细的代码示例展示其应用&#xff0c;并与其他类似工具进行对比。本文还将探讨BeanUtil在实际开发中的优势和使用…

Go微服务开发框架DMicro的设计思路

DMicro是一个基于Go语言开发的微服务开发框架&#xff0c;旨在简化微服务架构的开发、部署和运维过程。DMicro的设计思路主要围绕以下几个方面展开&#xff1a; 简化微服务开发流程 DMicro通过提供一套简洁的API和工具&#xff0c;使得开发者可以快速搭建微服务应用。它支持服…

景源畅信电商:抖店需要的成本高吗?

在数字化时代的浪潮中&#xff0c;短视频平台迅速崛起&#xff0c;成为连接用户与商家的新桥梁。抖音作为其中的佼佼者&#xff0c;不仅改变了人们的娱乐方式&#xff0c;也催生了新型的电商模式——抖店。许多人好奇&#xff0c;入驻这样一个充满活力的平台&#xff0c;需要承…

jwtcracker下载安装出现错误

1.jwtcracker 用于爆破jwt秘钥 2.下载 ubuntu/kali安装c-jwt-cracker及使用方法-CSDN博客 参考这个大佬写的 但是我在这里出现了这个问题 显示Cannot initialize the default message digest sha256, aborting 我实在找不出来哪里有问题&#xff0c;所以直接换成docker …

C++进阶:C++11(列表初始化、右值引用与移动构造移动赋值、可变参数模版...Args、lambda表达式、function包装器)

C进阶&#xff1a;C11(列表初始化、右值引用与移动构造移动赋值、可变参数模版…Args、lambda表达式、function包装器) 今天接着进行语法方面知识点的讲解 文章目录 1.统一的列表初始化1.1&#xff5b;&#xff5d;初始化1.2 initializer_listpair的补充 2.声明相关关键字2.1a…

springboot+vue2+elementui实现时间段查询

1.前端代码 使用elementui的时间段选择器&#xff1a; <el-date-picker v-model"queryPage.itemTime" type"daterange"value-format"yyyy-MM-dd" class"filter-item" range-separator"至" start-placeholder"创建…