The client actively sends information
## socket 服务端
# 导入 socket包
import socket
# 创建socket对象
socket_server = socket.socket()
# 服务端绑定监听的端口号 bind 参数 是二元元组
socket_server.bind(('localhost', 12345))
# 服务端开始监听端口号 每次只能监听一个连接对象。
# N 同时可以监听多个客户端
socket_server.listen(n)
# 接受客户端连接,活动连接对象
# accept 是阻塞方法,如果没有客户端连接,则会“卡”在当前位置,不行继续执行下面代码
# accept返回的是一个二元元组 return (x, y)
"""
results: tuple = socket_server.accept()
conn = results[0] # 连接的客户端对象
addres = result[1] # 连接的客户端ip地址
根据python 返回对值,接受多个值特点 以上可以合并成一句代码
conn , address = socket_server.accept()
"""
conn, address = socket_server.accept()
print(f"接受到了客户端的连接,客户端的信息是:{
address}")
while True:
# 接受客户端信息,要使用客户端和服务端本次连接的对象,而非是socket_server 对象
# recv 接受的参数是缓冲区大小,一般设定1024,就够用了
# recv方法返回值是一个字节数组,也就是bytes对象,不是字符串,可以通过decode方法通过UTF-8编码,转换成字符串对象
data: str = conn.recv(1024).decode("UTF-8")
if data == "exit":
break
print(f"客户端发来的信息:{
data}")
# 通过conn(客户端连接对象),send方法可以回复消息
# encode 可以将字符串编码为字节数组对象
msg = input("请输入你要和客服端回复的信息:").encode("UTF-8")
conn.send(msg)
# 关闭连接
conn.close()
socket_server.close()
# socket 客户端
# 导入包
import socket
# 创建socket对象
socket_client = socket.socket()
# 连接到服务端 参数 是二元元组
socket_client.connect(("socket服务端IP", 12345))
while True:
# 发送消息
send_msg = input("请输入要给服务端发送的信息")
if send_msg = 'exit':
# 通过结束while循环
break
# 消息需要编码为字节数组
socket_client.send(send_msg.endcode("UTF-8"))
# 接受服务器消息 recv 阻塞方法
recv_data = socket_client.recv(1024)
print(f"服务端回复的消息是:{
recv_data.decode('UTF-8')}")
socket_client.close()