使用S.Connect()超时的Python进行插座编程



我正在使用TCP套接字连接到某个网页,因为它将在循环中运行,以创建插座,连接,发送数据并接收,然后关闭套接字。问题是在随机迭代和特定的网站上进行s.connect()时间。我读过有关tcp time_wait的信息

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

添加了没有运气的情况。然后每次迭代后睡一秒钟,但仍然没有运气。我应该注意,它在另一个较慢的网络中正常工作,但在我试图运行代码的快速网络中不行。我认为遵循伪代码可以澄清更多:

while(1)
{time.sleep(1)
s = socket.socket() #TCP socket creation
s.settimeout(2) # 2 seconds for time-out which is more than needed
s.connect()
s.send(message) #which is a HTTP get request
s.recv() # which is a HTTP response
s.close()}

我的代码例程遵循以下步骤,每个套接字方法都正确实现,但是我在连接上获得了超时。我确定服务器正常运行。我怀疑这可能与TCP Time_wait有关,但是评论似乎并不同意

如果服务器在特定时间内未完成的TCP握手,则通常是因为服务器未及时响应。可能有多种原因是,例如服务器下降,在DNS查找过程中获得了服务器的错误IP地址,服务器被超载等。

s.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)

在连接上的客户端添加它没有用。

如果问题是由崩溃的服务器引起的,则在服务器端添加此功能将有所帮助,因为它将允许服务器在无需等待的情况下再次绑定到侦听器地址,因此服务器再次可用。但是,我不知道这是否真的是您面临的问题。

最新更新