我很迷茫。我不知道如何停止从服务器读取。我基本上是将目录中每个文件的列表从服务器发送到客户端。这就是我正在做的。
服务器端:
struct dirent *ep = readdir(dp);
while( ep ){
sprintf(buf, "%s", (ep->d_name));
n = write(newsock, buf, MAX );
ep = readdir(dp);
}
客户端:
while( n = read(sock, buf, MAX)){
printf("buf: %s\n" , buf);
}
所以服务器端的东西工作正常。我可以看到我正在正确发送所有文件名,但在客户端它读取了所有名称但只是等待阅读更多内容。
最佳答案
您要么需要从服务器发送一些“EOF”指示符以便客户端知道要中断循环,要么让服务器关闭套接字(在允许“一段时间”让客户端读取所有数据之后)。这将导致读取以错误条件退出。
从表面上看,第二个更容易,第一个可能更可靠和高效。恭喜,您现在已经构建了您的第一个通信协议(protocol)。
关于c - 如何停止从套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15118722/