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

相关推荐
超级码力6669 分钟前
【项目总结】【组网原理】备修信息化及宏观实现
网络·智能路由器
测试人社区—小叶子11 分钟前
接口测试全攻略:从Swagger到MockServer
运维·c++·人工智能·测试工具·机器人·自动化·测试用例
zfxwasaboy11 分钟前
BUG: failure at drivers/pci/msi.c:376/free_msi_irqs()!
linux·c语言·bug
文军的烹饪实验室12 分钟前
【无标题】unix:///tmp/supervisor.sock no such file
linux·运维·unix
yscript14 分钟前
GPU分配BUG: Duplicate GPU detected : rank 1 and rank 0 both on CUDA device d5000
linux·运维·服务器·vscode·bug
ytttr87319 分钟前
EMD分解与希尔伯特变换能量谱分析
网络·信号处理
Watermelo61721 分钟前
【简单快速】windows中docker数据如何从C盘迁移到其他盘
java·运维·docker·容器·运维开发·devops·空间计算
james bid22 分钟前
MacBook Pro 2015 上 XUbuntu 24.04 启用 eGPU (GeForce GTX 1080 Ti) 和核显黑屏问题解决
linux·ubuntu·macos·cuda·egpu
龙吟游戏22 分钟前
Ubuntu Server 25.10安装
linux·运维·ubuntu
电脑小管家23 分钟前
路由器怎么重新设置wifi密码
网络·windows·计算机外设·智能路由器·电脑