Как я могу использовать python розетки через интернет - PullRequest
0 голосов
/ 22 апреля 2020

Я создаю простое приложение чата с использованием python и хочу использовать его поверх inte rnet. Сервер запускается на моей локальной машине с уже переадресованным портом, и для предоставления доступа другим пользователям я предоставил им IP-адрес, полученный с www.whatismyip.com. Однако каждый раз, когда я тестирую приложение, клиентская сторона получает эту ошибку:

client_socket.connect((ip,port))
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not 
properly respond after a period of time, or established connection failed because connected host has 
failed to respond

На стороне сервера это выглядит так:

import socket

shost = socket.gethostname()
ip = socket.gethostbyname(shost)
port = 5000

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((ip,port))
server_socket.listen()
print(f"Server started on {ip}:{port}")
...

И на стороне клиента:

import socket

ip = "41.102.XXX.XX"
port = 5000

username = input("Username : ").encode('utf-8')
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((ip,port))
client_socket.send(username)
...

1 Ответ

1 голос
/ 22 апреля 2020

Если вы находитесь за маршрутизатором / NAT, а P C, где находится ваш сервер, имеет IP-адрес локальной сети, то вам нужно настроить переадресацию портов в маршрутизаторе / NAT с порта 5000 на порт 5000 в локальном IP-адресе. адрес. Другие 2 возможности: 1) клиент не отправляет пакеты на правильный IP-адрес, возможно, не через правильный сетевой интерфейс. Чтобы проверить это, вы можете использовать wireshark на клиентском компьютере. 2) на сервере есть какое-то правило брандмауэра, отбрасывающее входящие сообщения. Это возможно, если вы получаете сообщение об ошибке более чем через одну минуту. Обычно это происходит, когда после сообщения TCP SYN нет сообщения TCP SYN / ACK. А отсутствие SYN / ACK объясняется тем, что сообщение SYN не попадает на порт прослушивания сервера.

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