gpt4 book ai didi

基于控制台的聊天。如何分离消息和输入?

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:53 25 4
gpt4 key购买 nike

我必须用 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,只在客户端和服务器之间进行。

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

最佳答案

你没有提到你是在 Windows 上还是在 Linux 上......这个答案在大多数情况下假定是 Linux。

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

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

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

关于基于控制台的聊天。如何分离消息和输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10549831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com