代码解释:客户端通过TCP与服务端连接后如果发送文件目录查询命令,服务端执行以下代码。这段代码按照命令里的路径(msg.filename)查询其所在目录每个文件的名字并按一定格式加入到filename字符串中,最后将filename放入发送缓存区发送。
void Connection::list_file()
{
std::string path =msg.filename;
try {
std::string filename="";
for (const auto& entry : fs::directory_iterator(path)) {
filename.append("./");
if(!fs::is_directory(entry))filename.append("*");
filename.append(entry.path().filename().string());
}
SetSendBuffer(filename.c_str());
} catch (const std::exception& ex) {
std::cerr << "Error: " << ex.what() << std::endl;
}
std::cout << "sendbuf" << send_buffer_->c_str() << std::endl;
Write();
return ;
}
现在的问题是:客户端发送大概8次查询目录命令后,如果重新连接服务器,服务器就会报错Segmentation fault。如果上面代码的for循环中的文件相关代码替换掉,就不会报错,所以我暂时将问题定位到上面代码中for循环里的文件相关部分。