es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo aplicar ping-pong para un socket TCP?

Cómo usar ping/pong para verificar si el mensaje se ha entregado al servidor y recibir un pong después de una entrega exitosa del mensaje en el siguiente código.

Encontré este código en este enlace

“`python
server-side.py
import socket
from _thread import *

ServerSideSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ServerSideSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
host = '127.0.0.1'
port = 3040
ThreadCount = 0
try:
ServerSideSocket.bind((host, port))
except socket.error as e:
print(str(e))

print('Socket está escuchando…')
ServerSideSocket.listen(5)

def multi_threaded_client(connection):
connection.send(str.encode('El servidor está funcionando:'))
while True:
data = connection.recv(2048)
print(data)
response = 'Mensaje del servidor: ' + data.decode('utf-8')
if not data:
break
connection.sendall(str.encode(response))
connection.close()

while True:
Client, address = ServerSideSocket.accept()
print('Conectado a: ' + address[0] + ':' + str(address[1]))
start_new_thread(multi_threaded_client, (Client, ))
ThreadCount += 1
print('Número de hilo: ' + str(ThreadCount))
ServerSideSocket.close()

client-side.py
import socket

ClientMultiSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '172.0.0.1'
port = 3040
print('Esperando la respuesta de conexión…')
try:
ClientMultiSocket.connect((host, port))
except socket.error as e:
print(str(e))

res = ClientMultiSocket.recv(1024)
while True:
Input = input('Hola allí: ')
ClientMultiSocket.send(str.encode(Input))
res = ClientMultiSocket.recv(1024)
print(res.decode('utf-8'))

ClientMultiSocket.close()
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para utilizar el ping/pong para verificar la entrega de mensajes y recibir un pong después de una entrega exitosa del mensaje, podemos modificar el código de la siguiente manera:

    1. En el código del lado del servidor, podemos agregar un mensaje PING que se envía al cliente después de que se conecta. Esto es para verificar si el cliente aún está conectado y puede recibir mensajes. Podemos agregar las siguientes líneas de código justo después de la línea que envía el mensaje ‘El servidor está funcionando’:
    connection.send(str.encode('PING'))
    
    1. En el código del lado del cliente, podemos modificar el bucle while de la siguiente manera para enviar un mensaje PONG al servidor después de recibir un mensaje PING:
    while True:
        data = ClientMultiSocket.recv(1024)
        decoded_data = data.decode('utf-8')
    
        if decoded_data == 'PING':
            ClientMultiSocket.send(str.encode('PONG'))
        else:
            print(decoded_data)
    
    1. En el código del lado del servidor, después de enviar el mensaje de respuesta, podemos verificar si el mensaje es un mensaje PING y enviar un mensaje PONG como respuesta:
    if data.decode('utf-8') == 'PING':
        connection.send(str.encode('PONG'))
    else:
        connection.sendall(str.encode(response))
    

    Con estas modificaciones, el servidor enviará un mensaje PING al cliente después de que se conecte, y el cliente responderá con un mensaje PONG. Este proceso continuará en un bucle, asegurando que el cliente aún esté conectado y pueda recibir mensajes. Si el cliente no responde con un mensaje PONG, significa que se perdió la conexión y el servidor puede tomar las medidas apropiadas.

Comments are closed.