使用线程处理来自套接字的多个读/写?

时间:2016-12-07 00:58:40

标签: c multithreading sockets

我正在尝试创建一个客户端和服务器的两个程序,其中客户端打开套接字连接,然后将数据写入服务器,接受连接的服务器生成新线程然后分离它,以处理其余的读取/写。问题在于,当我进行多次写入时,从客户端读取读取并不能获得正确的数据,但是在服务器端打印它发送的数据是正确的。

这就是我的代码生成新线程的样子,以及我如何处理这些线程。

[product_page id="99"]

2 个答案:

答案 0 :(得分:1)

套接字读取调用可能会也可能不会返回客户端在单个调用中发送的整个数据。 每次读取调用都返回该调用中读取的字节数。因此,应用程序应该在循环中调用read,直到读取预期的字节数。

答案 1 :(得分:1)

如果没有某种协议,则无法通过TCP / IP实现客户端服务器通信。发送方写入的数据可以沿途切片和切块,并以不同的块长度提供给读者端。在尝试解释数据之前,您必须先判断是否收到了完整的帧。

例如,您可以使用非常简单的基于行的协议:读取数据,包括'\n'字节。将一个字节一次读入lien缓冲区的效率有些低,但易于实现。