C语言 基于控制台的聊天.如何分离消息和输入



我必须用C写一个简单的聊天。一个程序是客户端连接到的服务器,它管理它们发送的消息。客户端是另一个程序,在这里我遇到了一个问题。我希望能够接收来自其他客户端的消息(通过服务器(并将其打印在控制台输出上。但与此同时,我希望能够编写自己的消息并将其发送到服务器(因此也发送给其他客户端(。
问题是,当我写一些消息时,同时从服务器收到一条消息,整个输入都搞砸了。我想以某种方式将消息输出区域和消息输入区域分开。有什么好方法可以做到这一点吗?这是我在客户端程序中的分支(仍然是草稿(:

int pid = fork();
if(pid==0){
    do{
        scanf("%s", msg);
        printf("sending the message to the servern");
    } while(strcmp(msg, "exit"));
    kill(getppid(), SIGKILL);
    printf("kill the childn");
} else {
    while(1){
        printf("receiving a new messagen");
        sleep(1);
    }
}

编辑:
好的,我已经做了一个简单的ncurses应用程序,但还有一个问题。当我有两个进程(在 fork((之后(时,我如何在 ncurses 中写入同一个窗口?它们似乎有单独的窗口,我可以提供输入或从服务器读取输出,但不能在一个屏幕上同时提供。有什么建议吗?我不想在它们之间进行IPC,只在客户端和服务器之间进行IPC。

编辑2:
由于截止日期的临近,我终于放弃了诅咒的想法。如果程序是多线程的(不是多处理的(,那么它将完美运行,但是有了fork,一切都变得一团糟。无论如何,我在 ncurses 中完成了我的最后一个项目,所以仍然是一个有用的建议:)

你没有提到你使用的是Windows还是Linux...这个答案在很大程度上假设Linux。

典型的解决方案是使用 ncurses 之类的东西将屏幕分成两个"窗口",然后在一个窗口中显示从其他客户端接收的消息,并在另一个窗口中显示您的输入。 Curses 是一个库,用于利用终端控制代码进行光标定位等,以提供简单的基于控制台的 GUI。

如果您曾经使用过irc客户端,那么您已经体验过我所描述的内容。

有一个ncurses编程HOWTO,这可能是一个很好的起点。

最新更新