Python套接字麻烦

时间:2012-10-05 01:23:02

标签: python-2.7

也许我不理解套接字应该如何工作,所以也许有人可以帮助我。我虽然以下将永远循环打印“发送你好。收到:你好!”,但实际上它循环两次然后挂起。没有超时,连接重置连接等等。只需挂起。

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 个答案:

答案 0 :(得分: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循环之外。< / p>