我的 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)
多谢