1

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

服务器端:

 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);       
}   

所以服务器端的东西工作正常。我可以看到我正在正确发送所有文件名,但在客户端它读取所有名称但只是等待阅读更多。

4

2 回答 2

3

您要么需要从服务器发送一些“EOF”指示符,以便客户端知道要中断循环,要么让服务器关闭套接字(在允许客户端读取所有数据“一段时间”之后)。这将导致读取以错误条件退出。

第二个表面上更容易,第一个可能更可靠和高效。恭喜,您现在已经构建了您的第一个通信协议。

于 2013-02-27T17:47:36.327 回答
1

定义协议。

一个非常简单的方法可能是让服务器向客户端发送一个空的(0 长度)文件名,以告诉客户端发送完成。要成功地做到这一点,您可能希望通过例如附加\r\n序列或类似序列来分隔每个文件名。

于 2013-02-27T17:47:43.567 回答