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