我制作了一个简单的 tcp 服务器/客户端应用程序,客户端向服务器写入一些内容,然后将其回显给客户端。但是,当我尝试读取服务器在客户端回显的内容时遇到了一些问题。
string s;
while((n = read(socketFD[0],readBuf, BUFFER_SIZE)) > 0){
cout<<"\nBytes read: "<<n<<endl;
s.append(readBuf, n);
}
cout<<"\nTest after read\n";
我将 16 KB 的文本写入服务器。当我在客户端阅读时,我一次阅读 4 KB。
这段代码的输出是:
Bytes read: 4096
Bytes read: 4096
Bytes read: 4096
Bytes read: 4046
read 调用似乎在完成从套接字读取之后阻塞并且永远不会离开循环。我怎样才能解决这个问题?
编辑:这是处理连接客户端的服务器中的代码。
if((childpid = fork()) == 0){
close(listenFD);
while ((n = read(connectFD, buf, BUFFSIZE)) > 0){
cout<<"\nBytes read: "<<n<<endl;
write(connectFD, buf, n);
}
cout<<"\nTest after read\n";
exit(0);
}
这个输出是:
Bytes read: 4096
Bytes read: 4096
Bytes read: 4096
Bytes read: 4046
Test after read
与客户端中的代码相比,这里有什么不同?为什么读取调用不像在客户端那样阻塞?