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;但大多数还是以科普和…

活久见!谁想的这种办法让大模型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

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

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

计算机网络(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;知乎…

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

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

分类模型:MATLAB判别分析

1. 判别分析简介 判别分析&#xff08;Discriminant Analysis&#xff09; 是一种统计方法&#xff0c;用于在已知分类的样本中构建分类器&#xff0c;并根据特征变量对未知类别的样本进行分类。常见的判别分析方法包括线性判别分析&#xff08;Linear Discriminant Analysis, …

人工智能的潜在威胁:罗曼·扬波尔斯基对AGI的警示

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术正迅速成为人类社会不可或缺的一部分。然而&#xff0c;随着人工智能技术的发展&#xff0c;一些科学家对其潜在的危险表示了担忧。本文将深入探讨计算机科学家罗曼扬波尔斯基对人工智能特别是人工通用智…

Python学习笔记7:入门知识(七)

前言 之前说过我更换了新的学习路线&#xff0c;现在是根据官方文档和书籍Python crash course来进行学习的&#xff0c;在目前的学习中&#xff0c;对于之前的知识有一些遗漏&#xff0c;这里进行补充。 学习资料有两个&#xff0c;书籍中文版PDF&#xff0c;关注我私信发送…

Joplin Typora 粘贴图片 | 当使用Typora作为Joplin编辑器时,如何粘贴图片并上传到Joplin服务器,替换链接

一、背景 当我们使用Joplin时&#xff0c;上传图片时会自动上传到Joplin服务器并替换链接 但是Joplin的编辑器不好用&#xff0c;我更习惯用Typora来编辑&#xff0c; 然而Typora中上传的图片只能在本地&#xff0c;无法上传到Joplin服务器&#xff0c;在其他客户端也看不到图片…

C#——方法函数详情

方法(函数) C#是面向对象的,所以C#中的方法也是相对于对象来说的,是指某个对象的行为,比如,有一个动物的类,兔子是这个动物类里的一个对象,那么跳这个行为就是兔子这个对象的方法了.其实也就是C中的函数(C是面向过程的,叫函数). 方法: 就是把一系列相关的代码组织到一块 用于…

语法07 C++ 程序中的除法和求余

程序中的除法 int / int int double / int double int / double double double / double double 规律总结 只要除号任意一边出现了double类型&#xff0c;结果就是double类型 只有除号两边都是int类型&#xff0c;结果才是int类型 这个规律也适用于加法减法和乘法 …

服务器端渲染(SSR)

什么是服务器端渲染 ssr SSR 的全称是 Server Side Rendering&#xff0c;对应的中文名称是:服务端渲染&#xff0c;也就是将页面的 html 生成工作放在服务端进行。 网页通常是通过后端路由直接给客户端的。也就是说网页的html一般是后端服务器里通过模板引擎渲染好后再交给前…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(七)---- 系统调用函数与GDB(Lab: system calls)

系列文章目录 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&#xff09;---- 课程实验环境搭建&am…

Python 围棋游戏【含Python源码 MX_008期】

简介&#xff1a; 围棋&#xff0c;源自中国&#xff0c;是一种两人对弈的策略棋类游戏。它被认为是世界上最复杂的棋类游戏之一&#xff0c;因为它的规则简单&#xff0c;但变化复杂多样。围棋的游戏目标是在棋盘上占领更多的地盘&#xff0c;并用自己的棋子围住对手的棋子&am…