python socket模块学习记录
python黑马程序员
通过python内置socket模块,在电脑本地开发一个服务器,一个客户端,连接后进行连续的聊天。服务器和客户端均可输入exit,主动退出连接。
服务器开发.py
import socket
# 创建Socket对象
socket_server = socket.socket()
# 绑定ip地址和端口
socket_server.bind(("localhost", 8888))
# 监听端口
socket_server.listen(1) # 整数参数,表示接受的连接数量
# 等待客户端连接
# result: tuple = socket_server.accept()
# conn = result[0] #
# address = result[1]
conn, address = socket_server.accept() # 返回(连接对象,客户端地址信息)
print(f"接收到了客户端的连接,客户端的信息是:{address}")
while True:
# 接受客户端信息, 要使用客户端和服务端的本次连接对象
data:str = conn.recv(1024).decode("UTF-8")
# recv接受的参数是缓冲区大小,返回bytes对象,用decode转换为字符串对象
print(f"客户端发来的消息: {data}")
# 发送回复消息
msg = input("请输入你要和客户端回复的消息:")
if msg == 'exit':
break
msg = msg.encode("UTF-8") # encode将字符串编码为字节数组对象
conn.send(msg)
# 关闭连接
conn.close()
socket_server.close()
客户端开发.py
import socket
# 创建Socket对象
socket_client = socket.socket()
# 连接ip地址和端口
socket_client.connect(("localhost", 8888))
while True:
# 发送消息
msg = input("请输入要给服务端发送的消息:")
if msg == 'exit':
break
socket_client.send(msg.encode("UTF-8"))
# 接收返回消息
recv_data = socket_client.recv(1024) # 缓冲区大小,recv方法是阻塞的,直到收到消息为止
print(f"服务端回复的消息是:{recv_data.decode('UTF-8')}")
# 关闭连接
socket_client.close()
效果: