Имеется программа, создающая p2p-чат. Программа превосходно работает на одном пк, позволяя чатиться с самим собой. Но при попытке подключения к другому пк вызывается следующее исключение:
TimeoutError: [WinError 10060] Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера
Решить проблему помогает имитатор локальной сети Radmin VPN, если подключаться по ip, предоставляемым этим приложением, но я хочу избавиться от этой обязательной зависимости.
Код:
import socket
import sys
import threading
import time
port = 9091
data = None
def server():
global data
global port
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((socket.gethostbyname(socket.gethostname()), port))
print("Server started your ip", socket.gethostbyname(socket.gethostname()))
sock.listen(1)
conn, addr = sock.accept()
while True:
data = conn.recv(1024)
if data.decode('utf-8') == 'stop':
print(f'Anybody>>> {data.decode("utf-8")}')
sock.close()
return None
else:
print(f'Anybody>>> {data.decode("utf-8")}')
conn.send(f'Server {data.decode("utf-8")}'.encode("utf-8"))
def client():
global data
time.sleep(0.1)
sock = socket.socket()
while True: # Получение ip для подключения
ip = input('ip to connect>>> ')
try:
sock.connect((ip, port))
break
except:
print('invalid ip or connect error')
while True: # Процесс отправки сообщений
message = input('You>>> ')
if message == 'stop':
sock.send(message.encode("utf-8"))
sock.close()
return None
else:
sock.send(message.encode("utf-8"))
data = sock.recv(1024)
p1 = threading.Thread(target=server, name="t1")
p2 = threading.Thread(target=client, name="t2")
p1.start()
p2.start()
Заранее благодарен