постоянное клиентское соединение с сервером [Python] - PullRequest
0 голосов
/ 19 июня 2020

Я хочу создать соединение сервер-клиент, чтобы клиент всегда мог быть подключен к серверу. Как мне это сделать? Пожалуйста, помогите мне. когда я пытался, возникла эта ошибка. "ConnectionResetError: [WinError 10054] Существующее соединение было принудительно закрыто удаленным узлом"

- код -

сервер:

import socket
try:
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((host,port))
    s.listen(1)
    conn, addr=s.accept()
    while True:
         conn.send(("Test message").encode())
         print((conn.recv(1024)).decode())
except Exception as error:
    print(str(error)) 

клиент:

import socket    
try:   
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((server_host,port))
    while True:

         print((s.recv(1024)).decode())
         s.send(("Test message").encode())
except Exception as error:
    print(str(error))  

1 Ответ

0 голосов
/ 19 июня 2020

Это сообщение об ошибке вызывается по ряду причин:

  1. Сервер повторно использовал соединение, потому что он слишком долго простаивал.
  2. Может быть IP-адрес клиента или номер порта не такие же, как у сервера .
  3. Сеть между сервером и клиентом может временно отключиться.
  4. Сервер сначала не запускается.

Кажется, ваш код в порядке. Вы запускали сначала сервер, а затем клиент? Убедитесь, что это так. Приведенный ниже код полностью протестирован на моем компьютере.

Сервер:

import socket

HOST = '127.0.0.1'  # (localhost)
PORT = 65432        # Port to listen on

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()

    while True:
        data = conn.recv(1024).decode()
        if not data:
            break
        conn.send(data.encode())

Клиент

import socket

HOST = '127.0.0.1'  # Server's IP address
PORT = 65432        # Server's port

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))

    while True:
        s.send(("Hi server, send me back this message please").encode())
        data = s.recv(1024).decode()
        print('(From Server) :', repr(data))

Примечание. Сначала запустите сервер, затем клиент.

Вывод:

Output of running code

...