udp协议下的socket函数

目录

1.网络协议

2.网络字节序

3.socket编译接口

4.sockaddr结构体

5.模拟实现

1.socket函数

2.bind函数(绑定)

1.讲解

1.如何快速的将 整数ip<->字符串

2.ip地址的注意事项

3.端口号的注意事项

3.recvfrom函数

4.sendto函数

5.代码呈现

6.运行结果

7.开放UDP端口

8.更加体验这个udp的网络协议


建议不懂网络基础知识的先看一下这篇:网络基础知识-CSDN博客

1.网络协议

1.认识TCP协议

(1)传输层协议(2)有连接(3)可靠传输(4)面向字节流

2.认识UDP协议

(1)传输层协议(2)无连接(3)不可靠传输(4)面向数据报

3.注意

上面的有无连接,就是传输层和应用层是否建立连接,TCP连接就是客服端要想服务器发起申请链接,然后才能发送,但是UDP不管你。注意,两个没有好坏之分,都是褒义词,就像金属属性有惰性程度。简历链接的成本也是很大的!

2.网络字节序

我们刚开始学习C语言时,不知道你们有没有了解过大小端存储,没有的可以了解一下。但是网络协议出现的肯定是比大小端出现的晚,并且但是大小端当时没有谁有明显的优势,所以也不好替代谁,那么在网络传输时就出现问题了。所以TCP/IP协议规定,网络数据流一律采用大端字节序,即低地址高字节。

当然C语言肯定会提供接口的,不需要我们自己传唤。

3.socket编译接口

这个先了解一下,具体的下面会说。

4.sockaddr结构体

注意上面函数有一个结构体sockaddr的,其实它是有三个结构体:

对应的套接字编程的种类:1.原始套接字编程--网络工具(一般是跳过传输层进行编译)2.网络套接字编程--用户间的网络通信3.域间套接字--同一个机器内。

但是为什么上面函数只用一个sockaddr,就是想将网络接口统一抽象化,因此传输类型必须是一样的。其实判断也是很简单的:

5.模拟实现

1.socket函数

domain就是上面sockaddr结构体的AF_INIT和AF_UNIX,type就是选择的upd协议:

返回值,如果失败返回-1:

2.bind函数(绑定)

1.讲解

sockfd就是socket的返回值大小,addr则是绑定的ip地址,端口号等等信息,addrlen就是sizeof(addr)就好了。

当然最重要就是初始化addr:

先看看该类型的成员吧:

1.如何快速的将 整数ip<->字符串

就是将四个值都存储下来,注意将字符串转ip时,这样用一下引用,就会很简便的求出uint32_t ip了。ip转字符串就正常来就好了。

2.ip地址的注意事项

假设我们绑定当前账户的ip地址,会出现什么情况呢?

首先:虚拟机中代码是可以运行的,但是云服务是禁止直接bind公网IP,因为什么呢?因为一台主机的ip地址可能不止一个,可能是多个,但是你但凡绑定后,别人法另一个ip地址,你就接受不到了!所以一般默认是"0.0.0.0"。

3.端口号的注意事项

后面输入的是绑定的端口号

[0,1023]是系统内定的端口号,一般都要有固定的应用层协议使用,http:80,https:443,  mysql:2206(特殊的)。所以一般设置大于1023的端口号!

可以通过netstate -naup来查看自己设定的ip和端口号。

3.recvfrom函数

作用:接受别人发送来的数据。

buf就是接受别人发来数据的缓冲区,len就是buffer的长度,flags默认为0就好了,下面两个就是接受方要知道是谁发来的数据,到时候好发送回给对方。

4.sendto函数

作用:发送给别人的函数

参数和上面的没什么区别了。

5.代码呈现

Makefile:

main.cc

UdpServer.hpp

UdpClient.cc

log.hpp

Linux命名管道-CSDN博客

我在这上面写过。

6.运行结果

7.开放UDP端口

一般人运行上面程序是不会成功的,因为我们没有开放端口号,所以链接不到主机上。

解决一:
在买的云服务器的安全组里开:

解决二:
由于我在xshell上面修改了tcp的端口,所以再在华为云上修改udp导致web无法同步到上面,所以只能在linux上直接改防火墙:

8.更加体验这个udp的网络协议

很多人感觉这个进程间通讯没什么区别,那么可以让你们体验一下网络间通讯:

将这个压缩到桌面上,发给你的好朋友。

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

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

相关文章

不测评不知道,该这款主食冻干嚣张!PR、希喂、扑呀真实测评

主食冻干喂养越来越火了&#xff0c;除了知名的“四大金刚”K9、VE、SC、PR之外&#xff0c;也有像希喂、扑呀这类以营养、高肉含量为切入点的新锐品牌&#xff0c;各大猫粮商更是纷纷推出了自家的主食冻干产品。目前关于主食冻干的讨论也很多&#xff0c;但大多数还是以科普和…

江苏哪些行业需要服务器托管?

服务器托管顾名思义就是用户委托具有完善设备的机房、良好网络和丰富运营经验的服务商管理其计算机系统&#xff0c;使企业的服务器能够更加安全、稳定和高效的运行&#xff0c;那在江苏都有哪些行业需要服务器托管服务呢&#xff1f;本文就来大概介绍一下。 首先让我们来一起了…

spring管理的对象通过@Init注解修饰的方法不会在new对象的时候触发

Spring 管理的对象的初始化(init)函数并不会在 new 对象的时候自动触发,而是在 Spring 容器创建和初始化对象的时候触发。 Spring 容器管理对象的初始化过程包括以下几个步骤: 1 实例化对象 - Spring 容器使用构造函数或工厂方法创建对象实例。 注入属性 - Spring 容器会自动…

活久见!谁想的这种办法让大模型PK

文&#xff5c;白 鸽 编&#xff5c;王一粟 “每个大模型看起来都差不多&#xff0c;只能谁便宜先用谁的。但用下来之后&#xff0c;不合适再换&#xff0c;又费钱又费力”&#xff0c;一位AI 招聘公司的创始人对光锥智能抱怨道。 2024年&#xff0c;大模型正在加速走向行…

【Apollo配置中心】集成springboot自动监听属性变更和动态发布配置

1. 背景 在实际项目中&#xff0c;Spring Boot项目结合使用Apollo配置中心时&#xff0c;经常会遇到需要更新Apollo上的项目的一些配置&#xff0c;比如测试环境或生产环境中&#xff0c;需要修改某个类的属性值&#xff0c;如果我们在Apollo上更新了配置&#xff0c;已经在运…

因数与倍数 初级题目

最近又来更题了。这一次是《第三单元 因数与倍数第一部分》的初级题目。 参考答案见文尾 参考答案&#xff1a; CBDAABCBBACCCCCBCDCC

构建高效API的基本原则

在现代软件开发中&#xff0c;API&#xff08;应用程序编程接口&#xff09;扮演着至关重要的角色。一个高效且可靠的API能够极大地提升软件开发效率和应用性能。以下是构建高效API的一些基本原则&#xff0c;这些原则将帮助开发者设计出既高效又易于维护的API。 首先&#xf…

3389端口修改工具,修改3389端口的操作

3389端口作为远程桌面协议&#xff08;RDP&#xff09;的默认端口&#xff0c;常常成为黑客攻击的目标。为了提高系统的安全性&#xff0c;修改3389端口成为一项重要的安全措施。本文将详细介绍如何使用3389端口修改工具进行专业操作&#xff0c;以确保系统的安全稳定。 一、备…

Linux系统最大打开文件数量配置

Linux系统最大打开文件数量配置 前言概念&#xff1a;分为当前进程和系统最大文件数。 查看当前进程的最大打开文件数量 ulimit -n ,ulimit -a-a参数可以展示出详细的参数&#xff0c;即我们可以对什么资源做限制。系统资源被定义在***/etc/security/limits.conf***的文件中&am…

项目经验:别啥事都跟甲方讲

看过一个港片&#xff0c;片名一时想不起来了&#xff08;脑子不好&#xff0c;根本记不住多少名字&#xff09;&#xff0c;情节大概是一个学拍电影的副导演和一个职业杀手&#xff0c;副导演给杀手拍片记录杀人过程给金主看&#xff0c;电影蛮逗的&#xff0c;里面一个情节挺…

【JS重点11】解构赋值-对象解构

对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法 一&#xff1a;基本语法 const obj {uname: 微木,age: 10}const { uname, age } objconsole.log(uname, age); 对象解构的变量名要与解构对象中属性名相同&#xff0c;否则就会返回undefined解构的变量名不能…

计算机网络(3) 字节顺序:网络字节序与IPv4

一.小端与大端 小端&#xff08;Little endian&#xff09;&#xff1a;低字节保存在内存低地址&#xff0c;高字节保存在内存高地址。 大端&#xff08;Big endian&#xff09;&#xff1a;低字节保存在内存高地址&#xff0c;高字节保存在内存低地址。 例如&#xff08;14…

Python私教张大鹏 Vue3整合AntDesignVue之DatePicker 日期选择框

案例&#xff1a;选择日期 <script setup> import {ref} from "vue";const date ref(null) </script> <template><div class"p-8 bg-indigo-50 text-center"><a-date-picker v-model:value"date"/><a-divide…

Day50 代码随想录打卡|二叉树篇---验证二叉搜索树

题目&#xff08;leecode T98&#xff09;&#xff1a; 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右…

unity开发Hololens编辑器运行 按空格没有手

选择DictationMixedRealityInputSystemProfile 如果自定义配置文件 需要可能需要手动设置 手部模型和材质球

Centos: ifconfig command not found且ip addr查不到服务器IP

前段时间部门新派发了服务器&#xff0c;让我过去使用U盘装机&#xff0c;装完后使用ifconfig查不到服务器IP地址&#xff0c;ip addr也是查不到 ifconfig&#xff1a;command not found (这两个图片先用虚拟机的替代一下) 在网上找资料(CSDN&#xff0c;博客园&#xff0c;知乎…

深入理解Java中Transactional在不同方法间的穿透性及rollbackFor参数的应用

在线工具站 推荐一个程序员在线工具站&#xff1a;程序员常用工具&#xff08;http://cxytools.com&#xff09;&#xff0c;有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具&#xff0c;效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站&#xff1a;…

使用 Vue 和 Ant Design 实现抽屉效果的模块折叠功能

功能描述&#xff1a; 有两个模块&#xff0c;点击上面模块的收起按钮时&#xff0c;上面的模块可以折叠&#xff0c;下面的模块随之扩展 代码实现&#xff1a; 我们在 Vue 组件中定义两个模块的布局和状态管理&#xff1a; const scrollTableY ref(560); // 表格初始高度…

【HTML】格式化文本 pre 标签

文章目录 <pre> 元素中的文本以等宽字体显示&#xff0c;文本保留空格和换行符。 <pre> 元素支持 HTML 中的全局属性和事件属性。 示例&#xff1a; <pre> pre 元素中的文本 以等宽字体显示&#xff0c; 并且同时保留 空格 和 换行符。 </pre&…

git创建新分支

在Git中&#xff0c;要创建一个新的分支&#xff0c;可以使用以下命令&#xff1a; git branch <branch-name>这将创建一个名为 <branch-name> 的新分支&#xff0c;但它将仍然停留在当前分支上。要切换到新创建的分支&#xff0c;可以使用以下命令&#xff1a; …