1

也许我不了解套接字应该如何工作,所以也许有人可以帮助我。我认为以下内容会永远循环打印“Sent Hello. Received: Hello to you!”,但实际上它循环了两次然后挂起。没有超时,对等方重置连接等。只是挂起。

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!")
4

1 回答 1

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

在客户端程序中,您在启动时打开两个套接字,然后在程序的整个生命周期中使用这些套接字。

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

在服务器程序中,您accept()在主循环的每次迭代中重复一个新连接。这成功地接受了每个端口上的第一个连接,执行一个接收/发送周期,然后重新开始并尝试接受新连接,而不是继续使用现有的套接字。

其中一个程序需要更改。您的客户端程序需要在其 while 循环内调用socket()和调用connect(),或者您的服务器程序需要将其listen()accept()调用移出其 while 循环。

于 2012-10-05T01:35:14.633 回答