2016-09-14 7 views
0

Я начал изучать компьютерные сети, и я попытался использовать сокеты в Python. С небольшой помощью от youtube видео я сделал очень простую программу для общения между сервером и клиентом. Когда я пытался подключить клиента к «localhost», он работал так, как я хотел. Но когда я попытался использовать IP-адрес (который я нашел на findmyip.org, например, скажем 12.123.12.123), он просто не показывал никаких признаков подключения. Сервер является:Python- не удается подключиться к моему IP

import socket 
import sys 

def socket_create(): 
    try: 
     global host 
     global port 
     global s 
     host = '' 
     port = 9998 
     s = socket.socket() 
    except socket.error as msg: 
     print "socket creation error bluhbluh" 
    print "socket created" 

def socket_bind(): 
    try: 
     global host 
     global port 
     global s 
     print "Binding socket to port" 
     s.bind((host,port)) 
     s.listen(5) 
    except socket.error as msk: 
     print "socket binding error" 
     socket_bind() 


def socket_accept(): 
    conn,address = s.accept() 
    print "connection has been established" 
    print address[0] 
    send_msg(conn) 
    conn.close() 

def send_msg(conn): 
    while 1: 
     mess=raw_input() 
     if mess == "quit": 
      conn.send(mess) 
      conn.close() 
      s.close() 
      sys.exit() 
     if len(mess)>0: 
      conn.send(mess) 
      resp=conn.recv(1024) 
      print resp 

def main(): 
    socket_create() 
    socket_bind() 
    socket_accept() 

main() 

Клиент:

import socket 
import os 
import sys 

s = socket.socket() 
host = '12.123.12.123' #replace with 'localhost' for a working version! :D 
port = 9998 
s.connect((host,port)) 

while 1: 
    data = s.recv(1024) 
    print data 
    if data=="quit": 
     s.close() 
    else: 
     mess=raw_input() 
     s.send(mess) 

Я имел эту проблему раньше, и от того, что я помню, мне не удалось исправить, то как хорошо .. я (по крайней мере, я ДУМАЮ, что я сделал это правильно) Надеюсь, вы могли бы мне помочь Заранее спасибо :)

+2

«* Я попробовал переадресацию портов (по крайней мере, я ДУМАЮ, что я сделал это правильно) *« - подключение изнутри вашей сети к внешнему адресу и пересылка назад, требует специальной поддержки на брандмауэре/маршрутизаторе. Его часто называют «шпилькой NAT» или «loopback NAT». Если у вас есть базовое домашнее устройство, возможно, это не поможет. – TessellatingHeckler

ответ

0

Вы издаете, вероятно, связаны с сетью. IP-адрес, который вы опубликовали, называется так называемым маршрутизируемым IP-адресом, IP-адресом, доступным в Интернете. Обычно он назначается на сторону WAN вашего модема, предоставляемого поставщиком услуг Интернета, или маршрутизатора. Такие машины, как ваш компьютер, обычно будут работать на локальной сети сетевого устройства и, скорее всего, будут назначены немаршрутизируемые IP-адреса, которые нельзя увидеть из Интернета.

Когда вы переходите на сайт, который показывает ваш IP-адрес, он показывает ваш маршрутизируемый IP-адрес, а не тот, который назначено сетевому устройству для вашего устройства. Чтобы увидеть этот адрес, вы можете ввести «ipconfig» в командном окне Windows или «ifconfig» в оболочке терминала на linux и mac. Вы должны увидеть, что выводит список из одного или нескольких интерфейсов, которые содержат IP-адреса. Вероятно, у вас будет адрес 127.0.0.1, который равен localhost и известен как ваш loopback-адрес. Вы можете увидеть еще один, начиная с 10. или 192.. Этот адрес, скорее всего, тот, который назначен вам сетевым устройством. Вы можете попробовать этот адрес и посмотреть, работает ли ваша программа.

+0

Я пробовал 192. И это работало. Но в случае, если я хотел бы отправить этого клиента другу, живущему далеко, какой IP-адрес мне нужно ввести? маршрутизируемый IP? немаршрутизируемый IP? –

+0

Итак, есть несколько способов сделать это, и вам нужно немного понять, как настроить сетевое устройство. Лучший подход, который я хотел бы предложить, - использовать переадресацию портов. Как его настроить, зависит от вашего устройства. По существу, то, что будет делать порт-порт, это сказать, что любой трафик, адресованный WAN IP A на порту X, перенаправляет его на LAN IP B на порт Y. Он будет выставлять этот порт на вашем компьютере в Интернет, но только тот порт, который вы назначили. В зависимости от того, как вы написали программу, это может быть сделано с обеих сторон. –

+0

Хорошо, поэтому я использовал маршрутизируемый IP-адрес с другом, и я отправил его в порт, и он сработал. Спасибо! :) –

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