我正在尝试用 C++ 制作一个简单的聊天应用程序。它可以工作,但是,如果有人在其他人打字时输入某些内容。它就像写了他们正在输入的内容。我链接了图片作为下面的示例。
我用于客户端和服务器的代码可以在这里找到:
Client
Server
图片:
Before
After
一种方法是在用户第一次开始输入一行文本时设置一个标志 - 然后,如果在设置该标志时从网络接收数据,只需将接收到的数据排队到某个本地数据结构中(即,不要打印它)直到本地用户按回车键。当本地用户按回车键时,您将打印出他打字时排队的所有数据,并取消设置标志。
当然,这种方法有几个缺点:
- 如果本地用户输入一些文本并且从不按回车键,他将永远不会看到任何传入的远程文本。这可能是一个问题,例如如果用户按下空格键并走开。
- C/C++ 中的 cin/stdin 功能通常在每行基础上工作,您需要将终端设置为原始/非规范模式,以使其在本地用户仅输入一个字符(而不是输入一个字符)时报告缓冲字符直到本地用户按下回车键,然后立即将整行文本报告给您的程序)
另一种方法是将本地用户的文本和远程用户的文本保留在物理上独立的区域中(例如,窗口的上半部分和下半部分,就像许多聊天程序那样)。要做到这一点,需要比普通 C/C++ stdin/stdout/cin/cout API 提供的更多控制;你需要创建一个带有两个单独的文本小部件的 GUI 窗口(使用 Win32 或 Qt 或其他一些 GUI API),或者如果你想将所有内容保留在 MS-DOS 窗口中,你可能会使用类似的东西PDCurses来实现这一点。
不过,这些选项中的任何一个都不是微不足道的——与聊天应用程序的其余部分相比,它们可能需要更多的时间和精力来实现。如果是我,并且聊天应用程序只是一个学习练习,我会很想简单地将当前行为记录为“已知限制”,而不用担心修复它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)