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