Я пытаюсь создать простую пару программ сервер / клиент. В локальной сети они работают нормально, но когда я пытаюсь подключиться "извне", он говорит, что соединение отклонено. Я отключил брандмауэры на обеих машинах, но все еще не могу подключиться, и дважды проверил IP.

Что я делаю не так?

Благодарность

Джейк

Код:

import socket 
host = '' 
port = 9888 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port))     
s.listen(1) 
conn, adrr = s.accept() 
conn.send("Hello, world!") 
s.close() 

Client: 
import socket 
host = '68.x.x.x'
port = 9888
s = socket.socket(socket.AF_INET, socket_SOCK_STREAM)
s.connect((host,port)) 
print s.recv(200) 
s.close() 
0
Jake 20 Июн 2010 в 01:59

2 ответа

Лучший ответ

У вас есть одна из двух возможных проблем.

  1. Ошибочная конфигурация сети
  2. Ошибка (ы) в коде

Способ отладки - это попытаться исключить одно. Если мы сможем избавиться от проблемы с кодом, тогда мы будем знать, что это проблема сети.

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

3
Romain Hippeau 19 Июн 2010 в 22:47

Как обстоят дела с аргументом, который вы передаете вызову .bind для сокета вашего сервера? Это единственная наиболее вероятная причина - например, если вы используете 192.168.x.y для любых значений x и y, или 10.x.y.z аналогичным образом, это адрес только локальной сети, не маршрутизируемый межсетевыми маршрутизаторами Интернет-соглашения (большинство маршрутизаторов можно запрограммировать для пересылки некоторых входящих пакетов на определенный адрес локальной сети, обычно в зависимости от портов, но это очень характерно для марок и моделей маршрутизаторов).

1
Alex Martelli 19 Июн 2010 в 22:12