客户端流程
sockfd.connect(server addr)
- 功能:连接服务器
- 参数:元组服务器地址
为了防止两端都阻塞,recv send要配合使用
import socket
from socket import *
# 创建tcp套接字
sockfd =socket(AF_INET, SOCK_STREAM)
# 客户端一般不绑定端口 由操作系统自动分配端口
server_addr=('192.168.199.201',6542)
sockfd.connect(server_addr)
while True:
#over_data = sockfd.recv(1024)
#print("收到了 ", over_data.decode())
data=input("发送:")
if not data:
break
sockfd.send(data.encode())
aa=sockfd.recv(1024)
print("送到",aa.decode())
# if not data:
# break
sockfd.close() # 若客户端close后,recv会立即返回一个空
# 因为还有数据在读缓存里,客户端的应用程序没有读取。此时,如果close的话,客户端TCP 会发送RST给对端。
send 当缓冲区没有内容的时候,程序堵塞 缓冲区可以协调收发速度
收发缓冲区
tcp粘包(UDP不会出现粘包)
发送比接受的速度快,发送和接受的速率不协调。
- 原因:tcp以字节流方式传输,没有消息边界。多次发送的消息被一次接收,此时就会形成粘包。
- 影响:如果每次发送内容是一个独立的含义,需要接收端独立解析此时粘包会有影响。
解决方法:
- 1.人为的添加消息边界,再进行二次处理
- 2.控制发送速度