c - 如何停止从套接字读取

标签 c sockets

我很迷茫。我不知道如何停止从服务器读取。我基本上是将目录中每个文件的列表从服务器发送到客户端。这就是我正在做的。

服务器端:

 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/

相关文章:

c - 开放管道上 CloseHandle 上的 sigsegv

c 编程 - 打印平方数字和的序列(作为数组)以获得潜在的快乐数字

node.js - 通过net.socket发送文件

c - 从 SPI(GPIO 总线)读取值并通过以太网发送值

python - 在 Python 中使用套接字发送字典?

c++ - http 中的范围下载

arrays - C程序去除字符串中连续重复的字符

c - 检测线程安全链表中的死锁

c - C 中的动态 execlp

基于fork()的c服务器练习