一、服务端
from socket import *def print_hi(name):print(f'Hi, {name}')# 允许所有ip连接IP = '0.0.0.0'# 端口PORT = 8003# 定义一次从socket缓冲区读入512个字节数据BUFFER_LEN = 512# 实例化socket对象 listenSocket 用来监听的socketlistenSocket = socket(AF_INET, SOCK_STREAM) #socket网络层使用ip协议和tcp协议# 绑定地址和端口listenSocket.bind((IP, PORT))# 处于监听状态listenSocket.listen(5) #5表示最多能接收5个等待连接的客户端print(f'服务端启动成功,在{PORT}端口等待客户端连接...')# dataSpcket 用来接收和发送数据的socketdataSocket, addr = listenSocket.accept()print('接受一个客户端连接:', addr)while True:# 尝试读取对方发送的消息recved = dataSocket.recv(BUFFER_LEN) #BUFLEN指定从接收缓冲里最多读取多少字节# 如果返回为空表示对方关闭了连接# 退出循环,结束消息收发if not recved:break# 读取的字节数据是bytes类型,需要解码为字符串info = recved.decode()print(f'收到对方消息:{info}')#发送的数据类型必须是bytes,所以需要编码dataSocket.send(f'服务端接收到了消息 {info}'.encode())dataSocket.close()listenSocket.close()if __name__ == '__main__':print_hi('PyCharm')
二、客户端
三、消息格式
消息边界
格式参考