网络编程02

2023-10-29

网络通信
    底层遵循TCP/IP协议,在系统中以socket接口方式呈现

基于TCP协议的网络通信模型:
    服务端                              客户端
    创建socket对象                      创建socket对象          
    准备通信地址(本机ip)+端口号          准备通信地址(目标公网ip)+端口号
    绑定socket和通信地址                ...
    设置监听和排队数量                  ...
    等待客户端连接                      连接服务端
    分配新的socket对象+进程或者线程     ...
    接收请求                            发送请求
    响应请求                            接收响应
    关闭socket                          关闭socket 

    使用到的函数:
    int socket(int domain, int type, int protocol);
    功能:创建socket对象
    domain:
        AF_INET             基于IPv4地址通信
    type:
        SOCK_STREAM         数据流协议
    返回值:成功返回socket描述符,失败返回-1

    include <netinet/in.h> 
    struct sockaddr_in {
        __kernel_sa_family_t  sin_family; // domain写什么就填什么
        __be16        sin_port;          // 端口号(大端数据htons)
        struct in_addr    sin_addr;     // IP地址(大端数据)
    };
    struct in_addr {
        __be32  s_addr;
    };

大小端数据转换函数:
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
功能:把4字节的本地字节序转换成网络字节序

uint16_t htons(uint16_t hostshort);
功能:把2字节的本地字节序转换成网络字节序

uint32_t ntohl(uint32_t netlong);
功能:把4字节的网络字节序转换成本地字节序

uint16_t ntohs(uint16_t netshort);
功能:把2字节的网络字节序转换成本地字节序

IPv4地址转换:
    in_addr_t inet_addr(const char *cp);
    功能:把字符串格式的点分十进制的ip地址,转换成整数形式的ip地址(大端)
    例如:inet_addr("192.168.0.1")

    char *inet_ntoa(struct in_addr in);
    功能:把整数形式的ip地址转换成字符串格式的点分十进制的ip地址

    注意:send、recv函数是TCP协议通信时专用的数据发送、接收函数
    但是也可以继续使用write、read函数 

基于UDP协议的网络通信模型:
    接收者                      发送者
    创建socket                  创建socket 
    准备通信地址                准备通信地址
    绑定                        ...
    接收请求                    发送请求
    响应请求                    接收请求
    关闭                        关闭 

    使用到的函数:
    int socket(int domain, int type, int protocol);
    功能:创建socket对象
    domain:
        AF_INET             基于IPv4地址通信
    type:
        SOCK_DGRAM         数据报协议
    返回值:成功返回socket描述符,失败返回-1

    UDP协议专用的收发数据函数
    ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
    功能:发送数据,UDP专用
    sockfd:socket描述符
    buf:待发送数据的内存首地址
    len:待发送的字节数
    flags:是否阻塞,写0即可
    dest_addr:通信目标的地址结构体
    addrlen:地址结构体的字节数 
    返回值:成功发送的字节数 
            -1  出现错误
            0   通信关闭

    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
    功能:接收数据,UDP专用
    sockfd:存储数据的缓冲区首地址
    len:缓冲区的大小
    flags:是否阻塞,写0即可
    src_addr:用于存储发送者的地址结构体
    addrlen:既是输入也是输出
            1、告诉系统src_addr结构体的字节数
            2、反馈实际接收到的发送者的地址结构体字节数
    返回值:成功发送的字节数 
            -1  出现错误
            0   通信关闭

封装TCP/UDP
    1、gcc -c -fpic network.c
    2、gcc -shared -fpic network.o -o libnw.so
    3、sudo cp libnw.so /usr/lib/
    4、sudo cp network.h /usr/include/

练习:
    实现网络对战的五子棋

    


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络编程02 的相关文章

  • 软件测试|使用matplotlib绘制多种折线图

    简介 在数据可视化领域 Matplotlib是一款非常强大的Python库 它可以用于绘制各种类型的图表 包括折线图 本文将介绍如何使用Matplotlib创建多种不同类型的折线图 并提供示例代码 创建模版 在绘图之前 我们可以先创建我们的
  • 什么是充放电振子理论?

    CHAT回复 充放电振子模型 Charging Reversal Oscillator Model 是一种解释ENSO现象的理论模型 这个模型把ENSO现象比喻成一个 热力学振荡系统 在这个模型中 ENSO现象由三个组成部分 充电 Char
  • 基于java的婴幼儿产品销售系统设计与实现

    基于java的婴幼儿产品销售系统设计与实现 I 引言 A 研究背景和动机 婴幼儿产品销售系统是针对婴幼儿家庭的产品销售平台 该系统的设计需要满足安全 便捷 高效等多个方面的要求 针对该系统 我们可以采用基于Java的Web框架搭建 主要分为
  • 软件测试|使用matplotlib绘制平行坐标系图

    简介 绘制平行坐标系图 Parallel Coordinates Plot 是一种用于可视化多维数据的强大方法 在这篇文章中 我们将介绍如何使用Matplotlib库创建平行坐标系图 以及如何解释和定制这种图表 我们将使用一个示例数据集来演
  • 基于java的学生成绩管理系统设计与实现

    基于java的学生成绩管理系统设计与实现 I 引言 A 研究背景和动机 学生成绩管理系统是一个重要的教育工具 能够帮助学校管理学生的成绩和考试结果 以便更好地评估学生的教育水平和发展潜力 Java是一种广泛应用的编程语言 具有跨平台 高效
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 基于java的物流信息网系统设计与实现

    基于java的物流信息网系统设计与实现 I 引言 A 研究背景和动机 基于Java的物流信息网系统设计与实现的研究背景和动机 随着互联网的普及和电子商务的快速发展 物流信息网系统已成为现代物流管理的重要组成部分 物流信息网系统能够实现物流信
  • 【计算机毕业设计】二手图书交易系统

    随着世界经济信息化 全球化的到来和互联网的飞速发展 推动了各行业的改革 若想达到安全 快捷的目的 就需要拥有信息化的组织和管理模式 建立一套合理 动态的 交互友好的 高效的二手图书交易系统 当前的信息管理存在工作效率低 工作繁杂等问题 基于
  • 【计算机毕业设计】毕业生就业管理微信小程序_lm9q0

    腾讯公司在2017年1月19日发布了一款不需要下载 不需要卸载 不需要存储的软件叫微信小程序 受到了很多人的喜欢 微信小程序自2017年发布至今 依托微信的社交属性和庞大的用户基数 已经渗透到生活的方方面面 1 微信小程序可以将基于微信平台
  • js中关于字符串的创建和判断类型

    文章目录 创建方法 判断类型的技巧 区分 1 typeof 2 instanceof 共点 1 Object prototype toSt
  • 2024诸多大厂春招提前启动!Android的程序员还在等什么

    春招 提前批 已开 xdm别打瞌睡了 格力 顺丰 酷狗 沃尔玛中国 理想 科大讯飞等开启春招 开始收简历了 还有hc的企业提前抢人 春招时间短 节奏快 招满即止 就算挂了也绝不能不投 对企业来说 秋招和春招都是储备人才的黄金时期 春招中 除
  • 计算机Java项目|基于SSM的篮球系列网上商城设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|springboot校园台球厅人员与设备管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|在线图书管理

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 详解Java信号量-Semaphore

    第1章 引言 大家好 我是小黑 今天 咱们一起来深入探讨一下Semaphore 在Java中 正确地管理并发是一件既挑战又有趣的事情 当谈到并发控制 大家可能首先想到的是synchronized关键字或者是ReentrantLock 但其实
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 【go语言】结构体数据填充生成md错误码文件

    这里使用pongo2这个模版引擎库进行md文件渲染 GitHub flosch pongo2 Django syntax like template engine for Go package main import fmt github
  • 【一种新的Burton-Miller型奇异边界方法(BM-SBM)】用于声学设计灵敏度分析,2D和3D声学设计灵敏度分析的奇异边界方法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 2D 2 2 3D
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 学Python,一个月从小白到大神?看你怎么学!

    Python是一门超强大而且超受欢迎的编程语言 它被用在各种领域 比如网站开发 数据分析 人工智能和机器学习 学会Python会给你创造很多职业机会 所以绝对是值得一试的 但你有没有过这样的梦想 一个月时间 从Python小白变成Pytho

随机推荐

  • buucft web (exec)

    一 解题 打开链接 发现是一道ping题 于是便输入本地IP127 0 0 1查看回显 发现回显正常 然后便测试管道符合 是否可用并输入 127 0 0 1 ls 来查看文件目录 结果发现管道符合 并未禁用且发现以下两个文件目录 然后输入
  • 转盘中文字部分的实现(没啥用,别看)

    text width 642rpx height 642rpx width 590rpx height 590rpx margin left 26rpx margin top 26rpx display flex justify conte
  • uniapp上传图片视频文件集合组件

  • 分享一个科幻风的404

    先看效果 再看代码
  • 华为OD机试 C++ 最大可靠性设备

    题目 你正在组装一台设备 这台设备由不同种类的零件组成 每种类型的零件都需要一个 每个零件都有自己的 可靠度 和价格 昂贵的零件通常具有更高的可靠度 但是 组装完成的设备的可靠度是由所有零件中可靠度最低的那个决定的 也就是说 如果你有5个零
  • Redis操作工具类

    前期文章中关于RedisOperateUtil工具类使用时需要强制类型转换 针对List等操作不方便 为此特意更新RedisOperateUtil工具类 前文链接 https blog csdn net liwenyang1992 arti
  • 前端面试知识点总结

    前端知识点 vue知识点 Vue的两个核心点 组件渲染更新的过程 Vue的MVVM实现流程 虚拟 DOM patch 方法 diff 算法 什么是patch patch的流程 说一下指令v el的作用是什么 nextTick 使用场景和原理
  • Java 5-3、用户模块-Mapper.xml的SQL整理

    5 3 用户模块 Mapper xml的SQL整理 一 SQL总结 三个 select SQL login findUserById findUserByAccount 一个 insert SQL register 一个 update SQ
  • vue3+vant4结合(vue-i18n)实现国际化语言切换

    1 先安装i18n npm install vue i18n 2 配置多语言文件 先进行国际化配置在src下创建一个lang文件夹并在其中创建index js zh js en js文件 若为TS 更改文件后缀即可 自定义语言格式 expo
  • 测试数据又多又乱?自动化软件测试数据管理平台Parasoft DTPv2021.1发布

    Parasoft DTP 汇总来自不同测试实践的结果 提供对测试结果的智能和持续监控 消除了与错误软件相关的业务风险 加快了交付速度 并促进了持续的流程改进 DTP 监控和测量质量实践的应用 例如静态分析 单元测试 覆盖分析 运行时错误检测
  • burpsuite插件自动识别图片验证码暴力破解

    burpsuite插件自动识别验证码暴力破解 1 准备工具 2 工具配置 2 1 burp导入captcha killer modified 0 14 jar 2 1 1 先生成jar包 2 1 2 再将jar包导入burp 2 2 kal
  • linux %s替换命令,linux vi 替换命令

    linux vi 替换命令 发布时间 2010 10 22 16 34 53 作者 佚名 我要评论 久了没用vi 命令都忘了 到网上找了些 记录下 以下内容出自网络 来源已经不详 vi vim 中可以使用 s 命令来替换字符串 以前只会使用
  • 高效程序员工作法(八)

    目录 前言 一 如何做好验收测试 一句话总结 二 你的代码是怎么变混乱的 一句话总结 三 总是在MVC分层架构 但你真的理解分层么 一句话总结 四 为什么总有人觉得5万块钱可以做一个淘宝 一句话总结 五 先做好DDD再谈微服务吧 那只是一种
  • CTFshow-pwn入门-前置基础pwn29-pwn31

    什么是PIE 由于ASLR是一种操作系统层面的技术 而二进制程序本身是不支持随机化加载的 便出现了一些绕过方法 例如ret2plt GOT劫持 地址爆破等 于是 人们于2003年引入了位置无关可执行文件 Position Independe
  • TMDS协议

    1 概述 1 1 连接结构 图1 TMDS连接结构 数据流中包含了像素和控制数据 发送器在任何给定的输入时钟周期 到底是编码像素数据还是控制数据取决于数据使能信号DE DE有效时 指示像素数据要被发送 注意 当发送像素数据的时候 忽略控制数
  • echarts中的饼状图设置颜色

    第一种方式 color FE8463 red green 第二种方式 itemStyle normal color function params 自定义颜色 var colorList FE8463 red green return co
  • windows2008服务器维护,Windows Server 2008R2 & windows server 2012 R2

    PAGE TITLEWindows Server 2008R2 windows server 2012 R2 windows服务器维护 86988 net contacts DESCRIPTIONMd5 file get DT ROOT l
  • C++中cout和cerr的区别

    标准IO库定义的其中3个IO对象 一个istream类型对象 cin 两个ostream对象 cout cerr cin 读取标准输入的istream对象 对应于标准输入流 关联到标准输入设备 通常为键盘 用来读取用户在终端上的输入内容 通
  • 2021-03-26

    爬虫笔记1 爬虫基础 1 爬虫的特点介绍 1 知识点碎片化 面对不同的网站 每个网站都有每个网站的特点 根据不同网站采取不同的技术和手段 2 学习难度在于要与网站的运维人员和维护人员进行搏斗 网站的网爬是不断升级 3 学习特点 爬虫的阶段课
  • 网络编程02

    网络通信 底层遵循TCP IP协议 在系统中以socket接口方式呈现 基于TCP协议的网络通信模型 服务端 客户端 创建socket对象 创建socket对象 准备通信地址 本机ip 端口号 准备通信地址 目标公网ip 端口号 绑定soc