The principle of python network communication socket is the same as that of .net socket communication

insert image description here
The client actively sends information
insert image description here

##  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()


	
 
	

Guess you like

Origin blog.csdn.net/u013400314/article/details/131281388