服务器端:
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);
}
所以服务器端的东西工作正常。我可以看到我正在发送所有文件名,但在客户端它会读取所有名称,但只是等待阅读更多。
答案 0 :(得分:3)
您需要从服务器发送一些“EOF”指示符,以便客户端知道打破循环,或让服务器关闭套接字(在允许客户端读取所有数据的“一段时间”之后)。这将导致读取以错误条件退出。
从表面上讲,第二种方法更容易,首先可能更加可靠和高效。恭喜,您现在已经构建了第一个通信协议。
答案 1 :(得分:1)
定义协议。
一个非常简单的方法可能是让服务器向客户端发送一个空的(0长度)文件名,告诉客户端它已完成发送。要成功执行此操作,您可能希望通过例如addtionaly \r\n
序列或类似名称来分隔每个文件名。