0

我正在尝试建立一个 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] 永远不会等于我做出的任何选择。

我该怎么做才能使用户可以做出多种选择?太感谢了!

4

1 回答 1

0
while(n= read(sd,rbuf,BUFLEN)){

不是实现协议的好方法。不能保证它只返回一个数据集。例如,有可能:

  • read()来自两个或更多的返回数据write(),或者
  • 仅返回来自 a的read()部分数据write()

您应该对数据进行一些缓冲或更好的编码(例如,始终为后续数据的类型或长度添加前缀)。

于 2013-11-03T01:20:55.827 回答