1

我的 linux c 应用程序有问题。客户端用户可以从/向其他登录系统的用户读取、发送和删除消息。

我的问题是在列表消息功能期间:

服务器端代码

 if (strcmp(buffer, "list_messages") == 0) { 
     rewind(messages); // messages is the name of the file where messages are stored
while (fgets(line, sizeof(line), messages) != NULL) {
send(client_sock, line, strlen(line), 0);
    }
puts("all message sended");     }

客户端代码

if (ch == 1) { // 1 is the choose from a menu where u can choose what u wanna do ( read, list etc) 
  clearConsole();
 puts("MESSAGES LIST.\n");
 strcpy(buffer, "list_messages");
 send(sock, buffer, sizeof(buffer), 0); // tell to the server that we want to read messages
 memset(buffer,0,sizeof(buffer));
  do{
    nBytes = recv(sock, buffer, sizeof(buffer), 0 );
     if (nBytes < 0 || nBytes == 0) break;                                            
       buffer[nBytes]='\0';
       printf("%s", buffer);
      }while(nBytes > 0);
       puts("i'm out"); 

除了一件事,它可以工作:在服务器端我可以读取输出“发送的所有消息”,所以在客户端我可以看到所有消息,但我从来没有看到“我出去了”消息,事实上我只能使用 ctrl+ c 并退出应用程序。

如果我改变

 if (nBytes < 0 || nBytes == 0) break; 

if (nBytes > 0 || nBytes == 0) break;

我返回菜单,我可以选择另一个选项,但没有列出消息。

非常感谢你帮助我。也许这听起来像一个愚蠢的问题,但 Linux c 编程不是我的领域(而且你可以阅读,英语不是太 XD)

多谢

4

1 回答 1

0

也许发送方永远不会关闭套接字?如果是这种情况,您recv可能会阻止永远不会出现的“下一行”。

于 2013-10-16T22:34:40.297 回答