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