套接字编程的新手。有几个问题:
我的程序确实与其输出不一致。有时我的客户会收到,有时不会。我也每次都使用相同的输入。
只需要确认:接收到的字节数是否可以小于服务器发送的字节数?
如何才能在我拥有所需的所有字节后停止接收?
有没有办法让客户端知道它“将要”接收多少字节,以便我可以将 recv 置于 while 循环中?
感谢大家抽出宝贵时间 :) 如果重要的话,用 C++ 执行此操作/非阻塞。
最佳答案
假设这是 TCP(而非 UDP),您可以将套接字视为字节流。发件人可以他想要的任何方式放入它们,您也可以您想要的任何方式取出它们。因此,发送方可以在一次调用中写入一个 1k block ,如果需要,您可以一次接收一个字节。
有很多方法,但这里有两个相当简单的方法:
- 如果发送方在发送完所有数据后关闭套接字,接收方将收到所有发送的数据,下一次调用 recv 将返回 0,表示没有更多数据可接收。这就是 HTTP/1.0 的工作原理。
- 您可以更改您的协议(protocol)以发送某种包含您将要发送的数据长度的 header ,然后 recv 将知道预期有多少字节。对于 Content-length header ,这就是 HTTP/1.1 的工作方式(好吧,在大多数情况下)。
您可以使用 select 来告诉您那里是否有任何东西,尽管它不会告诉您有多少。见问题 2。
关于c++ - 关于发送/接收的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1752589/