使用基于代理的HTTP隧道时,TCP套接字有问题。通过HTTP代理的TCP套接字在空闲超时后断开连接
客户端(C++)打开一个TCP套接字到服务器(JAVA)。我添加了对HTTP代理的支持。一切工作不错,客户端发送“HTTP连接”的请求,这样以后继续为纯TCP连接:
CONNECT servername:5555 HTTP/1.1
Host: servername:5555
Proxy-Connection: Keep-Alive
HTTP/1.1 200
然而,如果空闲超时在代理配置并没有发送任何实际数据,连接将被终止,虽然客户端每60秒发送一次TCP保持活动数据包。空闲超时配置为10分钟。
TCP保持活跃被配置如下: 的WSAIoctl(插座,SIO_KEEPALIVE_VALS,&活着,的sizeof(活着),NULL,0,& dwBytesRet,NULL,NULL)
客户端IP - 192.168.91.xxx
代理IP - 192.168.92.yyy
244 47.133017000 192.168.91.xxx 192.168.92.yyy TCP 55 [TCP Keep-Alive] 64351 > 808 [ACK] Seq=4336 Ack=13084 Win=65700 Len=1
245 47.133336000 192.168.92.yyy 192.168.91.xxx TCP 66 [TCP Keep-Alive ACK] 808 > 64351 [ACK] Seq=13084 Ack=4337 Win=65536 Len=0 SLE=4336 SRE=4337
任何想法如何保持连接活着吗?
虽然HTTP1.1应该自动执行,但我试图添加“Connection:Keep-Alive”标头。无论如何,这并没有帮助。