首先让我说这是操作系统课程的家庭作业,我不是程序员,尤其不是 C 语言。我已经在这工作了一个星期了,我只是卡住了,我需要帮助。我必须创建 TCP 客户端和服务器应用程序,其中将 linux 命令键入客户端,在服务器上执行并将输出重定向回客户端。我理解这个概念,我有 90+% 的工作。“ls”、“ls -lpq”、“cat somefile”、“man somecommand”等命令都可以正常工作。我遇到麻烦的地方是命令不返回任何信息,如“mkdir newdir”(如果目录已经存在,它可以正常工作,因为我得到了响应)。这对我来说是全新的,但在我看来,我的问题在于服务器的 recv 命令阻塞,因为没有信息可以接收。我不知道如何解决这个问题,我已经在这个问题上工作了一周。我的时间不多了,我还必须实现文件上传和下载,我不知道从哪里开始,但在我解决这个问题之前我什至无法开始工作。
谢谢
// this is where I think the problem is
while ((rcvd_bytes = recv(sock_fd, recv_str, sizeof(recv_str), 0)) > 0 ) {
// Zero out the inputCopy buffer
memset(&inputCopy, 0, sizeof(inputCopy)+1);
// Copy the recv_str into a new string so that
// we can work with it.
strcpy(inputCopy, recv_str);
argcount = parsecommand(inputCopy, args);
//Send the message back to client
dup2(sock_fd, 1);
if((status = forkAndExecute(args)) != 0) {
//printf("Command %s returned %d.\n", args[0], status);
}
// as a test is I uncomment the following line mkdir newdir
// returns but the following commands are messed up - as I expect.
//printf("\n");
memset(&recv_str, 0, sizeof(recv_str)+1);
fflush(stdout);
}
if(rcvd_bytes == 0) {
puts("Client disconnected");
fflush(stdout);
}
else if(rcvd_bytes == -1) {
perror("recv failed");
exit(0);
}