socket服务端
# 服务端# 导入socket包from socket import *# 设置ip地址 绑定本机回环地址IP = '127.0.0.1'# 端口号PORT = 50000# 定义一次从socket缓冲区最多读入512个字节数据BUFLEN = 512# 实例化一个socket对象# 参数AF_INET表示该socket网络层使用IP协议# 参数SOCK_STREAM表示该socket传输层使用tcp协议listenSocket = socket(AF_INET, SOCK_STREAM)# socket绑定地址和端口# 设置服务端的地址和端口listenSocket.bind((IP, PORT))# 使socket处于监听状态,等待客户端的连接请求# 参数5表示 最多接收多少个等待连接的客户端listenSocket.listen(5)# 当连接成功时发送的参数print(f'服务端启动成功,在{PORT}端口等待客户端连接....')# 只有接收到客户端的请求才能触发以下代码#dataSocket, addr = listenSocket.accept() # 此处返回的是元祖print('接受一个客户端连接:', addr)while True:# 尝试读取对方发送的信息# BUFLEN 指定从接收缓冲里最多读取多少字节recved = dataSocket.recv(BUFLEN)# 如果返回空bytes 表示对方关闭了连接# 退出循环 结束消息收发if not recved:break# 读取的字节数据是bytes类型,需要解码为字符串# 虽然我们发送的是字符串,但发送出去的都是字节,需要进行转码info = recved.decode()print(f'收到对方信息,{info}')# 发送的数据类型必须是bytes,所以要编码dataSocket.send(f'服务端接收到了信息 {info}'.encode())dataSocket.close()listenSocket.close()
socket客户端
from socket import *IP = '127.0.0.1'SERVER_PORT = 50000BUFLEN = 512# 实例化一个socket对象,指明协议dataSocket = socket(AF_INET, SOCK_STREAM)# 连接服务端dataSocket.connect((IP, SERVER_PORT))while True:# input 接收字符串类型数据toSend = input('>> ')if toSend == 'exit':break# 将字符串数据转换为字节 并且发送到服务端dataSocket.send(toSend.encode())# 读取对方发送的信息 从缓存中读取字节recved = dataSocket.recv(BUFLEN)# 如果返回为空byte 表示对方关闭了连接if not recved:breakprint(recved.decode()) # 打印读取的信息dataSocket.close()
