Не работает p2p чат в сети
Есть код консольного TCP мессенджера на Python:
import threading
import socket
HOST = input('Enter IPv4: ~')
PORT_TO = int(input('Enter PORT_TO: ~'))
PORT_FROM = int(input('Enter PORT_FROM: ~'))
KEY = int(input('Enter key (number): ~'))
STOPPED = False
def encodeCrypt(data, key):
return data
def decodeCrypt(data, key):
return data
def server_part(host, port, keyCrypt):
global STOPPED
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((host, port))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
while not STOPPED:
data = input()
print(f"[YOU]: {data}")
encryptedData = encodeCrypt(data, keyCrypt).encode()
conn.sendall(encryptedData)
if data == '!stop!':
print('[connection is closing]')
STOPPED = True
exit()
break
exit()
exit()
exit()
def client_part(host, port, keyCrypt):
global STOPPED
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((host, port))
i = 0
while not STOPPED:
i += 1
data = decodeCrypt(s.recv(1024), keyCrypt).decode()
print('[SOMEONE]:', data)
if data == '!stop!':
print('[connection is closing]')
STOPPED = True
exit()
break
exit()
exit()
thread_server = threading.Thread(target=server_part, args=(HOST, PORT_TO, KEY))
thread_server.start()
input('press enter when 2nd person enters key | if u are 2nd person press immediately')
thread_client = threading.Thread(target=client_part, args=(HOST, PORT_FROM, KEY))
thread_client.start()
Когда я запускаю 2 раза этот файл в Win10, и затем на порты ввожу:
IP: 127.0.0.1
TO: 2000
FROM: 2001
KEY = 0
А в другом окне меняю FROM
и TO
.
То все работает, все сообщения приходят как надо.
Пояснение - здесь 2 сервера и два клиента на разных портах.
А когда я пытаюсь запустить код на двух разных компьютераХ, зная их глобальный IPv4, то вылетает ошибка:
Exception in thread Thread-1 (server_part):
Traceback (most recent call last):
File "C:\Users\foton\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner
self.run()
File "C:\Users\foton\AppData\Local\Programs\Python\Python310\lib\threading.py", line 953, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\foton\PycharmProjects\foton9thsectionchat\f9chat.py", line 25, in server_part
s.bind((host, port))
OSError: [WinError 10049] Требуемый адрес для своего контекста неверен
Возможно это что-то с фаерволом, но у меня разрешены все подключения к сети для Python.
В любом случае вопрос как исправить это?
Источник: Stack Overflow на русском