2012-09-03 58 views
0

這是服務器程序簡單的Python網絡問題

# Echo server program 
    import socket 

    HOST = ''     # Symbolic name meaning all available interfaces 
    PORT = 50007    # Arbitrary non-privileged port 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.bind((HOST, PORT)) 
    s.listen(1) 
    conn, addr = s.accept() 
    print('Connected by', addr) 
    while True: 
     data = conn.recv(1024) 
     if not data: break 
     conn.sendall(data) 
    conn.close() 

現在,我在想,如果我使用的端口是我們說的是50007,我的朋友,誰是一個單向的計算機要使用客戶端程序才能連接到我。那麼他是否也必須開放50007端口?你知道,爲了讓他連接到我。

這裏是BTW客戶端程序:

import socket 

    HOST = 'daring.cwi.nl' # The remote host 
    PORT = 50007    # The same port as used by the server 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((HOST, PORT)) 
    s.sendall(b'Hello, world') 
    data = s.recv(1024) 
    s.close() 
    print('Received', repr(data) 
+0

是的,任何兩個機器在一個特定的端口進行通信必須打開監聽端口並在防火牆分別發送數據 – avasal

+0

客戶端不一定需要打開端口號50007,也可以使用其他端口號連接服務器。唯一的問題是服務器必須打開端口號。 50007在它的邊。閱讀這篇文章的細節。 https://stackoverflow.com/questions/21827790/selecting-random-port-on-a-remote-hosthttps://stackoverflow.com/questions/21827790/selecting-random-port-on-a-remote-host –

回答

0

這將工作(從蟒蛇插座的觀點)。當你的朋友連接到你的套接字(通過.accept()調用'打開')時,該連接將保持打開狀態直到被關閉,允許你發回消息。

現在,問題可能是大學防火牆,它幾乎可以肯定地配置爲不允許出站(從他到你)端口50007上的連接。如果是這種情況,除非你有管理員訪問uni防火牆,將無法連接。

1

單向網絡應允許傳出 TCP連接到端口50007.網絡應允許端口傳入 TCP連接50007.