我必须用 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 中完成了我的最终项目,所以仍然是一个有用的建议:)