如何防止过度打字

Ian*_*erg 3 c++

我试图用c ++制作一个简单的聊天应用程序.它有效,但是,如果有人在其他人打字的时候输入了某些内容.它喜欢写下他们输入的内容.我将图片链接为以下示例.

我在客户端和服务器上使用的代码可以在这里找到:

客户

服务器

图片:

之前 在此输入图像描述在此输入图像描述

Jer*_*ner 7

一种方法是在用户第一次开始键入一行文本时设置标志 - 然后如果在设置该标志时从网络接收数据,只需将接收到的数据排队在某些本地数据结构中(即不打印它,直到本地用户按下返回.当本地用户按下return时,您将打印出他在键入时排队的所有数据,并取消设置该标志.

当然,这种方法有几个缺点:

  • 如果本地用户输入一些文本并且从不按回车,他将永远不会看到任何传入的远程文本.这可能是一个问题,例如,如果用户按下空间并走开.
  • C/C++中的cin/stdin功能通常以每行为基础工作,您需要将终端设置为原始/非规范模式,以便在本地用户只输入一个字符时(而不是缓冲字符,直到本地用户按下返回,然后立即将整行文本报告给您的程序)

另一种方法是将本地用户的文本和远程用户的文本保持在物理上独立的区域(例如,窗口的上半部分和下半部分,就像许多聊天程序一样).要做到这一点,需要比vanilla C/C++ stdin/stdout/cin/cout API给你更多的控制; 您需要创建一个GUI窗口(使用Win32或Qt或其他GUI API)和两个单独的文本窗口小部件,或者如果您想将所有内容保存在MS-DOS窗口中,您可能会使用PDCurses之类的东西来实现那.

但是,这些选项中的任何一个都是非平凡的 - 它们可能比其他聊天应用程序花费更多的时间和精力来实现.如果是我,并且聊天应用程序只是一个学习练习,我会被简单地将当前行为记录为"已知限制"而不用担心修复它.