2012-10-05 103 views
1

也許我不明白套接字應該如何工作,所以也許有人可以幫助我。我雖然認爲以下內容會循環印刷:「發送Hello!收到:Hello to you!」,但實際上它會循環兩次然後掛起。沒有超時,連接重置等。只是掛起。Python套接字問題

import socket 

socket_list = [] 
for i in range(60000, 60002): 
    soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    soc.connect("",i) 
    socket_list.append(soc) 

while True: 
    for soc in socket_list: 
     soc.sendall("Hello.") 
     msg = soc.recv(1024) 
     print "Sent Hello. Received:",msg 

在連接的另一端的代碼很簡單:

import socket 
soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
soc.bind("localhost",6000x) 
while True: 
    soc.listen(1) 
    conn, addr = soc.accept() 
    msg = conn.recv(1024) 
    if msg == "Hello": 
     conn.sendall("Hello to you!") 

回答

1
for i in range(60000, 60002): 
    soc.connect("",i) 

在客戶端程序,你在啓動時打開兩個插座,然後使用這些接口,用於程序的生命週期。

while True: 
    conn, addr = soc.accept() 

服務器程序反覆accept()主循環的每個迭代一個新的連接。這成功接受每個端口上的第一個連接,執行一個recv/send週期,然後重新開始並嘗試接受新連接,而不是繼續使用現有套接字。

其中一個程序需要更改。您的客戶端程序需要在其while循環中調用socket()connect(),或者您的服務器程序需要將其listen()accept()調用移出其while循環。

+0

非常感謝。這確實是問題所在。 – Chris