linux网络通信(TCP)

TCP通信

1.socket----->第一个socket

失败-1,错误码

参数类型很多,man查看

2.connect

由于s_addr需要一个32位的数,使用下面函数将点分十进制字符串ip地址以网络字节序转换成32字节数值

同理端口号也有一个转换函数

我们的端口号位两个字节16位,所以使用第二个htons函数

完整示例

3.bind

4.listen-------->设置第一个socket为监听的socket

监听有没有客户端发起连接请求

5.accept--->第二个socket

从连接请求的队列里面获取这些请求,然后与对应的客户端,完成连接的建立,返回一个已经完成连接的socket的fd

获取ip地址及端口号

返回点分十进制ip地址

端口号

以下示例获取客户端ip及端口号

封装函数时

将字符串转为整形

由于我们输入的ip以及端口号是一个字符串,但我们需要一个整形端口号,再在sock里转换成一个·32位数,所以要用atoi函数将字符串端口号转换成整形。

对比一下

port<==>"5000",ip都是字符串

示例

客户端

服务器

TCP粘包问题

缓冲区没刷新,应该分开的数据一起打包发送

解决

1.手动价格分隔符,在接收端辨别

2.指定每次传输长度

3.用结构体

网络通信专用的收发函数

recv

flags为MSG_DONTWAIT时执行非阻塞操作

send

同recv接近

相关推荐
倔强的石头106几秒前
kingbase备份与恢复实战(六)—— 备份自动化与保留策略:Windows任务计划+日志追溯
运维·windows·自动化
bjzhang753 分钟前
Linux曝出“核弹级”漏洞CVE-2026-31431:攻击者可瞬间提权
linux·漏洞·提权·cve-2026-31431
枳实-叶9 分钟前
【Linux驱动开发】第三天:上下文核心概念全解 —— 进程/中断上下文+切换开销+TLB刷新原理
linux·驱动开发
feng_you_ying_li13 分钟前
linux之FILE和文件系统(磁盘的介绍)
linux·运维·服务器
Jelena1577958579228 分钟前
Python 爬虫获取淘宝商品详情(标题、主图、SKU、价格)实战指南
网络·爬虫·python
摘星编程28 分钟前
# AI Agent 落地实战:从单Agent到多Agent协作的系统架构与实践
网络·人工智能
followless35 分钟前
linux server中搭建questasim 10.6c & ise14.7
linux·fpga开发
Surplusx41 分钟前
HCIP交换综合实验
网络·智能路由器
The Chosen One9851 小时前
【Linux】深入理解Linux进程(二):进程的状态
linux·运维·服务器·开发语言·git
草莓熊Lotso1 小时前
Linux Socket 编程筑基:从底层本质到核心 API,一文吃透 Socket 预备知识
linux·运维·服务器·数据库·c++