Как подключиться с помощью Python Sockets к другому компьютеру в той же сети - PullRequest
1 голос
/ 14 июля 2020

Итак, я пытался придумать способ использования сокетов для создания терминального чат-приложения, и мне это удалось довольно хорошо. Поскольку я мог протестировать его только на одном компьютере, я не понимал, что он может не работать на разных компьютерах. Мой код очень прост:

# Server
import socket
HOST = "0.0.0.0"
PORT = 5555

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    while True:
        conn, addr = s.accept()
        with conn:
            print("Connected to", addr)
            data = conn.recv(1024)
            print("Received:", data.decode())
            conn.sendall(data)
# Client
import socket
HOST = "192.168.0.14"
PORT = 5555

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b"Hello this is a connection")
    data = s.recv(1024)
print("Received:", data.decode())

Я пробовал изменить ip на 0.0.0.0, использовать gethostname и многое другое, но это просто не работает. Сервер запущен и работает, но клиент не может подключиться. Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 14 июля 2020

Я считаю, что 0.0.0.0 означает подключение из любого места, что означает, что вы должны разрешить порт 5555 через ваш брандмауэр.

введите описание изображения здесь

Вместо 0.0.0.0 используйте localhost в качестве адреса и на клиенте, и на сервере.

Я только что протестировал ваш код, используя localhost для сервера, клиента и вашего программа работала.

сервер:

Connected to ('127.0.0.1', 53850)
Received: Hello this is a connection

клиент:

Received: Hello this is a connection

Как видите, все, что я изменил, это адрес как на сервере, так и на клиенте . Если это не сработает, значит, что-то вне вашей программы мешает вам добиться успеха. Это может быть проблема с разрешениями или другая программа прослушивает порт 5555.

server.py

# Server
import socket
HOST = "0.0.0.0"
HOST = "localhost"
PORT = 5555

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    while True:
        conn, addr = s.accept()
        with conn:
            print("Connected to", addr)
            data = conn.recv(1024)
            print("Received:", data.decode())
            conn.sendall(data)

if __name__ == '__main__':
    pass

client.py

# Client
import socket
HOST = "localhost"
PORT = 5555

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b"Hello this is a connection")
    data = s.recv(1024)
print("Received:", data.decode())

if __name__ == '__main__':
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...