在将GET发送到套接字后忽略/丢弃传入的HTML

时间:2018-05-10 04:39:05

标签: python html sockets hang

我使用以下代码段将数据发送到Web服务器。在这种情况下,我根本不关心服务器想要发回的HTML页面。服务器支持需要该数据的其他客户端,因此我无法消除将在Raspberry Pi上的Python上返回的HTML数量。我所看到的是ESP-8266服务器似乎经常等待将数据发送回我的Python / Pi客户端。就像Pi停止接受数据直到出现故障。作为测试,我删除了50%的正在服务的网页,它在Pi / Python上运行良好。我是否应该在python代码中做一些事情来设置缓冲区大小或发出命令以确保数据被丢弃而不是保存在可能溢出的某个套接字缓冲区或导致python / pi停止接受服务器数据的东西?

htmlString = ("/Interior, /COLOR,r="+str(dimPixelIn[0]).zfill(3)+",g="+str(dimPixelIn[1]).zfill(3)+",b="+str(dimPixelIn[2]).zfill(3))
conn = http.client.HTTPConnection(awningAddress, timeout=0.3)
try:
    conn.request("GET", htmlString)
except socket.timeout as sto:
    print("Error")
except http.client.HTTPException as Exc:
    print("Error")
finally:    
    conn.close()
conn.close()

1 个答案:

答案 0 :(得分:1)

TCP连接由2个几乎独立的单向流组成。 conn.close()仅关闭从客户端到服务器的流。从服务器到客户端的连接仍处于打开状态,服务器仍然会发送数据。

我知道2选项如何防止服务器发送不必要的数据。

  • 请勿使用GET方法。使用OPTIONS方法。如果服务器支持OPTIONS方法(并且它应该),那么就像GET请求一样处理它,但是它发送带有HTTP头但没有正文的HTTP响应。
  • 重置连接而不是关闭它。您可以在设置SO_LINGER套接字选项时重置连接 - 例如,请参阅Sending a reset in TCP/IP Socket connection