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