如何从套接字读取数据,直到客户端停止发送?

时间:2015-09-08 19:05:32

标签: sockets tcp go

我有一些问题。 我有客户端和服务器。客户端通过TCP与服务器连接。 然后,客户端发送一些数据(由块分隔),我不知道数据的长度(TLS握手)。但我知道客户端发送一些固定长度的数据,然后停止,直到没有收到一些响应,然后他再次发送固定长度的数据。

我需要读取所有块,直到客户端停止发送(因为这么多块)。怎么做?

我只有一个想法,它超时了。循环读取数据并在迭代之间设置超时。如果超时结束,则收集数据。

也许有更优雅的解决方案?

1 个答案:

答案 0 :(得分:2)

根据您评论中的信息,您做错了。编写HTTPS代理的正确方法是读取CONNECT行,建立上游连接,将适当的响应发送回客户端,然后如果成功,则同时开始在两个方向上复制字节。您并不是最不关心数据包或读取大小,并且您当然不应该尝试收集'重传之前的数据包,因为这只会增加系统的延迟。

您可以通过每个连接启动两个线程,每个方向一个线程,或通过非阻塞套接字和select()/poll()/epoll(),或Go中的任何内容来完成此操作。

但是我根本不知道你为什么这么做。已经存在大量的开源HTTP代理,当您处理HTTPS时,没有任何值可以添加到它们中。您对“业务逻辑”的主张是什么?没有意义,或者至少是无法实现的。