2015-11-13 2 views
1

Я пытаюсь написать два коротких сценария python, которые соединят две или более машины друг с другом, одну как сервер, а остальные - как клиенты. Он отлично работал при тестировании клиента и сценария сервера на том же компьютере, но когда я попробовал его с другого компьютера, клиент продолжал тайм-аут; он не мог подключиться к серверу. Вот мой код сервера: КодPython Sockets: Connection Timeout

import socket 
server = socket.socket() 
host = "computername" 
port = 12345 
server.bind((host, port)) 
server.listen(5) 

client, addr = server.accept() 

Клиент:

import socket 
server = socket.socket() 
host = "computername" 
port = 12345 
server.connect((host, port)) 

Любой ключ, почему машины не могут подключиться?

+0

Вы пытались отключить межсетевой экран (на обоих компьютерах)? У вас есть [общедоступный ip] (http://superuser.com/q/165986/13868) на сервере? Что произойдет, если вы запустите 'python3 -mhttp.server --bind имя_компьютера 12345' в качестве сервера и' python3 -c 'из urllib.request import urlopen; print (urlopen (' http: // computer: 12345 ') .read () .decode()) "как клиент? – jfs

+0

@ J.F. Себастьян Как работает этот код? Я не понимаю, что с этим делать. –

+0

скопируйте эти команды в командную строку (терминал, консоль) на соответствующих компьютерах (сначала http-сервер, а затем клиент, который делает запрос). Цель состоит в том, чтобы выяснить, является ли проблема вашим кодом или сетью. Если запрос успешный, то проблема - это ваш код. Если запрос не удался, проблема не имеет ничего общего с вашим кодом Python, и вы должны сначала настроить сеть. – jfs

ответ

0

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

+0

Нет, переменная хоста такая же; это имя моего компьютера. Я попробую использовать IP-адреса. –

0

Связь может быть запрещена брандмауэром.

Чтобы исключить проблемы, связанные с DNS, попробуйте IP-адреса вместо имен хостов:

# server: listen on all interfaces 
server.bind(('', port)) 

и:

# client: specify server's IP address 
server.connect(("192.168.XX.YY", port)) 

с реальным IP-адресом, конечно.

+0

Я отдам это. –

+0

Использование IP-адресов не «адресовало» проблему. Я все еще время от времени. Я попробую еще кое-что, например, проверить IP-адрес, но я не могу этого сделать. Мой код должен работать, не так ли? –

+0

@ I.A.S. В этом случае наиболее вероятным объяснением является брандмауэр на сервере. – VPfB