""" Socket服务端 """ import socket # 创建Socket对象 socket_server = socket.socket() # 绑定IP地址和端口 socket_server.bind(("localhost", 8888)) # 监听端口 # listen方法内接受一个整数传参数,表示接受的链接数量 socket_server.listen(1) # 等待客户端链接 # result: tuple = socket_server.accept() # conn = result[0] # 客户端和服务端的链接对象 # address = result[1] # 客户端的地址信息 conn, address = socket_server.accept() # accept方法返回的是二元元组(链接对象, 客户端地址信息) # 可以通过 变量1, 变量2 = socket_server.accept()的形式,直接接收二元元组内的两个元素 # accept方法是阻塞方法,等待客户端链接,如果没有客户端进行链接,就卡在此行,不向下执行 print(f"接收到了客户端的链接,客户端的信息是{address}") while True: # 接收客户端信息,要使用客户端和服务端的本次链接对象,而非socket_server对象 # recv接收的参数是缓冲区大小,一般给1024即可 # recv方法的返回值是一个字节数组也就是bytes对象,不是字符串,可以通过decode方法通过UTF-8编码,将字节数组转换为字符串对象 data: str = conn.recv(1024).decode("UTF-8") print(f"客户端发来消息是:{data}") # 发送回复消息 msg = input("请输入你要和客户端回复的消息:") if msg == 'exit': break conn.send(msg.encode("UTF-8")) # encode可以将字符串编码为字节数组对象 # 关闭链接 conn.close() socket_server.close()