1

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

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

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

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

4

1 回答 1

2

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

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

如果您曾经使用过irc客户端,那么您已经经历过我所描述的情况。

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

于 2012-05-11T10:51:32.483 回答