我在QT中进行套接字编程,我必须设计一个通过TCP/IP传输数据的协议。通过套接字修改数据包大小
现在我的协议设计很简单。它以一种方式发送命令,每写入一次,写入套接字的数据的第一个字节就是命令。因此,无论何时使用socket-> write(“CDATA”)写入第一个字节,此时的“C”将意味着服务器执行某些操作的命令。
我只想知道一件事,即写入是否会分解为服务器上的多次读取?我知道服务器上会有一个用于读取的缓冲区大小。但是,当写入处于服务器的缓冲区限制内时,客户机上的socket-> write()是否可以在服务器上的多次读取中接收?
要清除此问题,我将给出一个示例假设服务器上的套接字的缓冲区读取大小为4096字节。客户端将套接字写入(“CDATA”)到服务器。现在有没有可能的服务器会收到多于一个读取?因为我在服务器上有一个while循环:
while{
char str[] = socket->read();
// What is the coomand in the first byte
if(str[0] == "C"){
// Do something
}
}
如果由客户端发送的数据在一个以上的读取(即使客户端发送它在一个写)收到我的协议设计将失败。
由于您对大写单词的使用不当,我现在试图解码您的消息可能包含的任何帮助。不要担心人工登录名是否正确 – Wug