2015-12-11 4 views
0

Я не могу определить сервер с реальным IP-адресом моего компьютера, он дает мне ошибку. Когда я это делаю с моим локальным IP-адресом, это работает, но я хочу запустить клиент в другом компьютереserver.bind(), только локальный IP-адрес

import socket 
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
server_socket.bind(('my_ip',9876)) 
server_socket.listen(1) 
(client_socket,client_address)=server_socket.accept() 
recived_data=client_socket.recv(999999999) 
password=open(r'D:\passwords','wb') 
password.write(recived_data) 
client_socket.close() 
server_socket.close() 

клиент:

import socket 
my_socket = socket.socket() 
my_socket.connect(('the_real_ip', 9876)) 

ошибка, я получаю:

Traceback (most recent call last): 
File "D:/Heights/Documents/Projects/Cyber/Password_Server.py", line 4, in <module> 
server_socket.bind(('my_ip',9876)) 
File "D:\Heights\PortableApps\PortablePython2.7.6.1\App\lib\socket.py", line 224, in meth 
return getattr(self._sock,name)(*args) 
socket.error: [Errno 10049] The requested address is not valid in its context 
+1

Возможный дубликат [Python Socket \ [Errno 10049 \] 'Запрошенный адрес недопустим в его контексте'] (http://stackoverflow.com/questions/27005738/python-socket-errno-10049-the- request-address-is-not-valid-in-its-context) – Markon

+0

Не могли бы вы лучше объяснить проблему? Поскольку socket.bind «связывает» сокет с локальным адресом. Это означает, что вы можете запускать ту же программу на другом компьютере. Если вы хотите запустить клиент, вам необходимо знать IP-адрес сервера, но сервер python не должен это знать. Это для клиента (где вам нужно использовать '.connect') – Markon

+0

Я хочу знать, как подключиться к серверу на моем компьютере у клиента из локальной сети. поэтому, если я использую локальный IP-адрес в .bind(), то какие addres мне нужно использовать в .connect() –

ответ

1

Вы можете использовать server_socket.bind(('0.0.0.0',9876)) и server_socket.bind(('',9876))

Проверить эту ссылку: https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1

Для подключения извне вашей локальной сети, вы должны подключиться к маршрутизатору этой локальной сети с помощью «вне IP» и сделать пусть маршрутизатор formward подключения к ' локальный IP '.

Смежные вопросы