Python implementa la comunicación básica servidor-cliente de Socket

      Este artículo usa python para implementar la comunicación básica servidor-cliente de socket, con explicaciones detalladas paso a paso y códigos completos, según sea necesario.

(1) Código del servidor:

1. Importe el módulo de socket incorporado y cree una instancia de socket. El servidor necesita usar bind para vincular la instancia al nombre de dominio y puerto especificado. El nombre de dominio y el número de puerto se pasan en una tupla

import socket

#创建 socket对象
socket_server=socket.socket()

# 绑定 socket_server到指定的ip地址
socket_server.bind(("localhost",8888))

2. Configure el monitoreo de puertos, escriba números en listen() para indicar la cantidad de conexiones que se pueden aceptar

#监听端口
socket_server.listen(1)

3. Use el método de aceptación para esperar a que el cliente se conecte. Este método es un método de bloqueo. Si no hay conexión, siempre se bloqueará en este paso. Una conexión exitosa devolverá una tupla, que contiene el objeto de conexión y la información de la dirección del cliente , respectivamente. 

result=socket_server.accept()
conn=result[0]  #客户端连接对象
address=result[1]  #客户端地址信息

4. Use el método recv del objeto de conexión para recibir el mensaje enviado por el cliente. El tamaño del búfer de la tabla 1024 puede configurarlo usted mismo y decodificarlo en formato UTF-8.

   data = conn.recv(1024).decode("UTF-8")

   print(f"客户端发来的消息是:{data}")

5. Use el método de envío del objeto de conexión para enviar un mensaje al cliente

msg=input("请输入回复的消息:")
conn.send(msg.encode("UTF-8"))

6. Desconecte el enlace después de que finalice la comunicación.

conn.close()
socket_server.close()

Código completo del servidor:

import socket

#创建 socket对象
socket_server=socket.socket()

# 绑定 socket_server到指定的ip地址
socket_server.bind(("localhost",8888))

#监听端口, listen()内书写数字,表示可以接受链接的数量
socket_server.listen(1)

#等待客户端连接,接收到的 result是一个二元元组, accept()是一个阻塞的方法,如果没有连接不会往下执行
result=socket_server.accept()
conn=result[0]  #客户端连接对象
address=result[1]  #客户端地址信息

print(f"接收到的客户端连接信息为{address}")

while True:
   #接收客户端信息,recv接受的参数是缓冲区大小,一般1024即可,返回的是一个字节数组,bytes对象,不是字符串,再将其decode解码为字符串对象
   data = conn.recv(1024).decode("UTF-8")

   print(f"客户端发来的消息是:{data}")

   #回复消息
   msg=input("请输入回复的消息:")

   if msg=='exit':
       break

   conn.send(msg.encode("UTF-8"))

#关闭连接
conn.close()
socket_server.close()

(1) Código de cliente:

1. Introduzca el módulo de socket incorporado, cree una instancia de socket y luego vincule el nombre de dominio y el puerto del servidor, y también pase las tuplas como parámetros

import socket

#创建 socket对象
socket_client=socket.socket()

# 让 socket对象 socket_client 连接到服务端
socket_client.connect(("localhost",8888))

2. Luego puede usar enviar para enviar un mensaje al servidor

msg=input("请输入你要发送的消息:")

socket_client.send(msg.encode("UTF-8"))

3. Use recv para esperar el mensaje de respuesta del servidor después del envío, y también necesita configurar el búfer y decodificar

   data=socket_client.recv(1024).decode("UTF-8")
   print(f"服务器回复的消息为:{data}")

4. Desconecte el enlace después de que finalice la comunicación.

socket_client.close()

Código de cliente completo:

import socket

#创建 socket对象
socket_client=socket.socket()

# 让 socket对象 socket_client 连接到服务端
socket_client.connect(("localhost",8888))

while True:
   msg=input("请输入你要发送的消息:")

   if msg=='exit':
      break

   #发送消息
   socket_client.send(msg.encode("UTF-8"))
   #接收消息
   data=socket_client.recv(1024).decode("UTF-8")
   print(f"服务器回复的消息为:{data}")

socket_client.close()

Supongo que te gusta

Origin blog.csdn.net/weixin_52212950/article/details/130619144
Recomendado
Clasificación