Linux系统编程第八弹——网络编程2
3. 编程1. 编程接口:socket --- 套接字1.被当做一个特殊的文件来看 --- 操作时当做文件来看 --- 获得对应fd ---描述符(字)2.socket本身也是要给函数接口 ---通过该函数接口可以使用linux的网络功能编程: 基于传输层协议学习tcp tansmition control protocol //传输控制协议udp (user datagram) //用户数据报协议2. tcp网络编程模型cs client —— serverbs browser —— serverp2p —— peer to peer1. cs编程——客户端1. socket#include sys/types.h#include sys/socket.hint socket(int domain, int type, int protocol);功能:创建通信的一端参数domain 通信范围AF_UNIX ---本地通信AF_INET ---IPV4AF_INET6 --- IPV6type socket的类型SOCK_STREAM //流式套接字SOCK_DGRAM //用户数据报prtocol 表示前面类型对应的具体协议SOCK_STREAM -默认走的协议就是 tcpSOCK_DGRAM -默认走的协议就是 udp填0 表示走默认协议返回值:成功 返回 socket对应的文件描述符失败 返回 -1 errno被设置2. connectint connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);功能发起连接请求参数sockfd 客户端的socket文件描述符addr 代表服务器端的地址信息addrlen addr对应的地址结构体类型的大小2.1 IPV4的地址结构体struct sockaddrstruct sockaddr_in {sa_family_t sin_family; 代表通信范围in_port_t sin_port; 网络字节序格式的端口号struct in_addr sin_addr; ip地址};struct sockaddrstruct in_addr {uint32_t s_addr; uint32_t --unsigned int --- ip地址 --- 网络字节序};网络字节序大小端只要是发到网络中的数据 ---统一成网络字节序(大端模式) --- 接收放--收到后转换位本机的字节序(主机字节序端口号 htons#include arpa/inet.huint16_t htons(uint16_t hostshort);功能:将hostshort主机字节序数值转换位 网络字节序参数:hostshort 要转换的数值返回值成功 转换好的网络字节序eg: htons(50000);ip地址 inet_addr#include sys/socket.h#include netinet/in.h#include arpa/inet.hin_addr_t inet_addr(const char *cp);功能:将cp传来的ipv4格式的地址转换为网络字节序的数值参数:cp 需要的是一个点分十进制格式的ip地址 192.168.1.122返回值:成功 返回转换好的网络字节序数值失败 -12.cs编程——服务端1.socket2.bind 与connect用法一致3. listenint listen (int sockfd, int backlog)功能将sockfd设置为监听套接字参数sockfd socket创建的fdbacklog 队列的大小最大128返回值成功 0失败 -1errno4.acceptint accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);功能获取连接请求建立连接套接字参数sockfd 监听套接字caddr 用来获取对端的地址信息addrlen 值结果参数注意必须自己初始化一个值sizeofaddr注意accpet 是个阻塞操作 ---如果请求连接队列中为空此时accept会阻塞等待ntoachar *inet_ntoa(struct in_addr in);功能: 将网络字节序 转换为 字符串形式ip地址参数:in 要传保存了ip地址的 struct in_addr 变量返回值:成功 返回值 对应ip地址的字符串失败 NULL网络专有读写ssize_t read (int fdvoid *buf,size_t count);ssize_t recv(int sockfd, const void *buf, size_t lenint flags);ssize_t write(int fdconst void|*buf, size_t count);ssize_t send (int sockfd, const void *buf, size_t lenint flags);功能从指定的sockfd套接字中以flags方式获取长度为len字节的数据到指定的buff内存中。参数sockfd如果服务器则是accept的返回值的新fd如果客户端则是socket的返回值旧fdbuff 用来存储数据的本地内存一般是数组或者动态内存。len 要获取的数据长度flags 获取数据的方式0表示阻塞接受。返回值成功 表示接受的数据长度一般小于等于len

相关新闻

计算滤波系数

计算滤波系数

FPGA 软件无线电SDR AD9361 ZYNQ开发 只提供文字资料:包含详细开发文档和工程源代码。最近在折腾软件无线电项目,用AD9361射频前端搭配ZYNQ平台搭了套开发系统。这组合确实香——ZYNQ的ARM核跑Linux做高层协议,FPGA处理基带数据流&#xff0c…

2026/7/8 13:10:34 阅读更多 →
vue3+vite+JS,使用Echarts封装一个饼图,父子组件联动

vue3+vite+JS,使用Echarts封装一个饼图,父子组件联动

本文要在vue3viteJS项目中,使用Echarts封装一个饼图子组件,父组件中引入子组件并传入数据。传入的数据包括标题、高度、宽度、饼图数据,resize监听尺寸。子组件监听饼图数据的变化,来更新子组件的显示内容。 文章目录一、实现思路…

2026/7/6 9:55:34 阅读更多 →
基于非完整约束RRT算法与混合控制协议的充满障碍物环境中分散式非完整约束系统的避碰控制器研究(Matlab代码实现)

基于非完整约束RRT算法与混合控制协议的充满障碍物环境中分散式非完整约束系统的避碰控制器研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

2026/7/7 0:32:32 阅读更多 →

最新新闻

NAS / 服务器断电数据丢失?UPS 配套 USB关机保护板,市电断电池低自动提示服务器/电脑关机

NAS / 服务器断电数据丢失?UPS 配套 USB关机保护板,市电断电池低自动提示服务器/电脑关机

20年UPS监控产品研发,专注于UPS机房,电池巡检,环境监测等领域,提供专业,稳定可靠的应用方案和成熟的系列产品。 20年UPS监控产品研发,专注于UPS机房,电池巡检,环境监测等领域&#x…

2026/7/8 13:47:35 阅读更多 →
TLP241A光耦与GD32VF103VBT6在工业隔离设计中的应用

TLP241A光耦与GD32VF103VBT6在工业隔离设计中的应用

1. 项目背景与核心需求在工业控制和电力电子系统中,电气隔离是一个至关重要的设计考量。TLP241A光耦与GD32VF103VBT6微控制器的组合,为解决高噪声环境下的信号传输问题提供了可靠方案。这个设计主要应对三个核心挑战:安全隔离:防止…

2026/7/8 13:45:35 阅读更多 →
5分钟极速方案:用OneDragon重构你的《绝区零》游戏体验

5分钟极速方案:用OneDragon重构你的《绝区零》游戏体验

5分钟极速方案:用OneDragon重构你的《绝区零》游戏体验 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 当你打开…

2026/7/8 13:45:35 阅读更多 →
6.LVM动态扩容

6.LVM动态扩容

1.如图,提前在虚拟机中添加了三块NVMe硬盘2.使用以下命令创建vg并为创建的卷组添加pv,并查看效果vgcreate [vg名称] [块设备文件]:创建vg并为创建的卷组添加pvpvscan:查看pv信息vgdisplay [vg]:查看指定vg信息3.为vg01…

2026/7/8 13:45:34 阅读更多 →
PyQt6中文教程终极指南:7天快速掌握Python桌面应用开发

PyQt6中文教程终极指南:7天快速掌握Python桌面应用开发

PyQt6中文教程终极指南:7天快速掌握Python桌面应用开发 【免费下载链接】PyQt-Chinese-tutorial PyQt6中文教程 项目地址: https://gitcode.com/gh_mirrors/py/PyQt-Chinese-tutorial 想要用Python创建专业的桌面应用程序吗?PyQt6中文教程为你提供…

2026/7/8 13:41:33 阅读更多 →
如何5分钟快速上手AcFunDown:免费开源A站视频下载器完整指南

如何5分钟快速上手AcFunDown:免费开源A站视频下载器完整指南

如何5分钟快速上手AcFunDown:免费开源A站视频下载器完整指南 【免费下载链接】AcFunDown 包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习使用喔 项目地址: https://gitcode.com/gh_mirrors/ac/AcFunDown AcFunDow…

2026/7/8 13:39:33 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻