2014-01-19 5 views
0

Это мой код для сервера:Server/Client Connection (Python)

import socket 

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
host = "192.168.1.3" 
port = 8000 
print (host) 
print (port) 
serversocket.bind((host, port)) 

serversocket.listen(5) 
print ('server started and listening') 
while 1: 
    (clientsocket, address) = serversocket.accept() 
    print ("connection found!") 
    data = clientsocket.recv(1024).decode() 
    print (data) 
    clientsocket.send("data is sent".encode()) 

и для клиента:

import socket 

s = socket.socket() 
host ="59.93.199.XXX" 
port =8000 
s.connect((host,port)) 
s.send('randomData'.encode()) 
data = '' 
data = s.recv(1024).decode() 
print (data) 
s.close 

Я хочу, чтобы это работало на двух компьютерах через Интернет. , когда я положил host = "192.168.1.3" в клиент, он работает нормально, но это только для компьютеров, подключенных к одной сети. Дело в том, что пока сервер работает, и я проверяю открытый порт в сети, сервер показывает «найденное соединение», но он не подключается к серверу через клиент. что я делаю неправильно? PORT 8000 открыт.

192.168.1.3 является IP моего компьютера и 192.168.1.1 является шлюз ОШИБКИ, что я получаю, когда я запускаю КЛИЕНТ:

Traceback (most recent call last): File "C:\Users\Harsh's\Desktop\aaa.py", line 6, in s.connect((host,port)) ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

ответ

1

across two computers across the internet

В этом случае сервер либо нужна общественность, статическом адрес, или вы должны настроить маршрутизатор для маршрутизации входящих соединений для порта 8000 для перенаправления (перевода) на ваш сервер (NAT, PATting и т. д.).

Адрес для кемпинга: "59.93.199.XXX"? Ваш маршрутизатор? Затем вам нужно сделать перевод/перенаправление/цепочку.

После нескольких тестов, проблема показала, что:

s = socket.socket() 

вместо

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
+0

оно направлено. www.yourgetsignal.com показывает свое открытое. У меня есть dyanamic ip, но без перезагрузки, почему он не работает? –

+0

В этом случае привяжите сервер к его общедоступному адресу, а не к его локальному. Или привяжите его ко всем доступным интерфейсам. – Hyperboreus

+0

Я noob, объясните более подробно , если я сделаю host = на сервере, он показывает ошибки. Я думаю, что сервер в порядке, потому что он показывает подключенные сообщения, когда я проверяю открытый порт. Я думаю, что проблема с клиентской стороной –