tcp/socket
ftp server
1,读取文件名
2,检测文件是否存在
3,打开文件
4,检测文件大小
5,发送文件大小和md5给客户端
6,等待客户端确认
7,开始边读边发
# 粘包
两个相邻的包一起发会导致错误
time.sleep(0.5)会避免
client_ack = conn.recv(1024) 进行一次接收,避免粘包
服务器端
import socket server = socket.socket() server.bind(("localhost", 6969)) #绑定要监听的端口 server.listen(2) #监听多少个连接 while True: conn,addr=server.accept() #等待数据 #conn就是客户端连过来而在服务器端围棋生成的一个连接实例 print(conn) print(addr) # server.accept() while True: data = conn.recv(1024) if data is None: print("connection lost") break print("recv", data) print(type(data)) conn.send(data.upper()) server.close()
客户端
import socket client = socket.socket() #生命socket类型,生成socket连接对象 client.connect(('localhost', 6969)) while True: msg = input("type here >>").strip() if len(msg) == 0: continue client.send(msg.encode('utf-8')), # 不能send空 data = client.recv(1024) print(data.decode()) client.close()
socket server
1,必须创建一个请求处理类继承BaseRequestHandler,重写父类里的handle()方法
2,必须实例化TCPserver并且传递server IP和上面创建的请求处理类
3,请求函数:
server.server_forever() 处理多个请求,永远执行
server.handle_request() 处理一个请求就退出