我正在尝试建立一个 TCP 文件传输连接,使客户端能够选择他想要执行的“任务”(列出目录中的文件、上传、下载文件),但一旦做出选择就不会终止。这意味着他在每次训练中可以做多个选择。
我遇到的问题是在服务器端实现 while 循环时:
while(n= read(sd,rbuf,BUFLEN)){
if (rbuf[0] == 'R'){//CHANGE DIR
//char *dircha;
//read(sd, rbuf, BUFLEN);
printf("ENTER change directory\n");
//chdir(dircha);// this will change directory
}
if(rbuf[0] == 'L'){//LIST FILES
requiem[0] = 'I';
requiem[1] = 20;
printf("TYPE: %c", requiem[0]);
write(sd, requiem , 2);.... //rest of code
rbuf 不会被“清除”,并且仍然包含客户端在输入选择时所输入的字符,一旦进入 while 循环并选择一个选择,它将永远无法选择另一个任务,因为 rbuf[0]永远不会等于我所做的任何选择。
我该怎么做才能让用户可以做出多种选择?非常感谢!
最佳答案
while(n= read(sd,rbuf,BUFLEN)){
不是实现协议(protocol)的好方法。无法保证它返回恰好一个数据集。例如。有可能:
read()
从两个或多个write()
返回数据,或者read()
仅从write()
返回部分数据
您应该对数据实现一些缓冲或更好的编码(例如,始终将后续数据的类型或长度作为前缀)。
关于c - 客户端选择的有效 while 循环条件(Linux 中的 TCP 连接 - C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748773/