2016-09-14 51 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」或「環回NAT」。如果你有一個基本的家庭設備,它可能根本不支持這樣做。 – TessellatingHeckler

回答

0

你問題可能與網絡有關。您發佈的IP是所謂的可路由IP,即暴露於互聯網的IP。它通常被分配到ISP提供的調制解調器或路由器的WAN端。像您的電腦這樣的機器通常位於網絡設備的局域網側,可能會分配一個不可路由的IP,這些無法從互聯網上看到。

當您前往顯示IP的站點時,它顯示的是可路由的IP,而不是網絡設備分配給您的計算機的IP。要查看該地址,可以在Windows的命令窗口中鍵入'ipconfig',或者在Linux和Mac上的終端shell中鍵入'ifconfig'。您應該在輸出中看到包含IP地址的一個或多個接口的列表。一個可能有127.0.0.1的地址,它等於本地主機,並被稱爲您的環回地址。你可能會看到另一個以10或192開頭的。該地址可能是網絡設備分配給您的地址。你可以試試這個地址,看看你的程序是否工作。

+0

我嘗試了192.它的工作。但如果我想將這個客戶發送給一個住在很遠的朋友,我需要投入哪些IP?可路由的IP?不可路由的IP? –

+0

所以,有幾種方法可以做到這一點,並且需要對如何配置網絡設備有一些瞭解。我建議的最好的方法是使用端口轉發。如何配置取決於您的設備。從本質上講,端口轉發將會做的是,任何發往端口X上的WAN IP A的流量都會將其重定向到端口Y上的LAN IP B.它會將您的機器上的端口暴露給互聯網,但只會分配您分配的端口。根據你編寫程序的方式,這可能必須在雙方完成。 –

+0

好吧,我使用了可路由的IP與朋友,我端口轉發它,它的工作。謝謝! :) –