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接近

相关推荐
冉佳驹4 分钟前
Linux ——— Git的核心操作流程、进程状态及环境变量相关知识
linux·git·进程·环境变量·进程状态·fork
黑不溜秋的5 分钟前
Ubuntu 20.04 安装 搜狗输入法
linux·运维·服务器
norsd5 分钟前
CentOS 设置 DNS
linux·运维·centos
LCG米12 分钟前
时间敏感网络(TSN)交换机在嵌入式实时系统中的实现与应用教程
网络
XXYBMOOO15 分钟前
使用 HTML5 Canvas 实现可交互的数据瀑布流(隐藏式运维模式)
运维·交互·html5
KaDa_Duck17 分钟前
DASCTF 2025下半年赛 PWN-CV_Manager复盘笔记
linux·笔记·安全
Blossom.11819 分钟前
Transformer时序预测实战:用PyTorch构建股价预测模型
运维·人工智能·pytorch·python·深度学习·自动化·transformer
模型启动机20 分钟前
Google推出托管MCP服务器,让AI Agent轻松接入其工具生态
运维·人工智能·ai·大模型
星夜落月21 分钟前
从零开始:在服务器上部署Material for MkDocs完全指南
运维·markdown·建站
GanGuaGua21 分钟前
计算机网络:HTTP报文
网络·网络协议·计算机网络·http