Я не могу подключиться к розетке снаружи - PullRequest
0 голосов
/ 20 июня 2010

Я пытаюсь создать простую пару программ сервер / клиент.В локальной сети они работают нормально, но когда я пытаюсь подключиться извне, он говорит, что соединение отказано.Я закрыл брандмауэры на обеих машинах, но я все еще не могу подключиться, и я дважды проверил 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() 

Ответы [ 2 ]

2 голосов
/ 20 июня 2010

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

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

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

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

1 голос
/ 20 июня 2010

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

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