2012-10-05 75 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