如何防止过度打字

2023-12-03

我正在尝试用 C++ 制作一个简单的聊天应用程序。它可以工作,但是,如果有人在其他人打字时输入某些内容。它就像写了他们正在输入的内容。我链接了图片作为下面的示例。

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

Client

Server

图片:

Before enter image description here After enter image description here


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

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

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

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

不过,这些选项中的任何一个都不是微不足道的——与聊天应用程序的其余部分相比,它们可能需要更多的时间和精力来实现。如果是我,并且聊天应用程序只是一个学习练习,我会很想简单地将当前行为记录为“已知限制”,而不用担心修复它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止过度打字 的相关文章

随机推荐

  • 为可变参数模板函数中的每个模板类型调用 void 函数?

    我的目标是编写一个简单的通用函数来注册任意 C 类型的转换器 为了简单起见 我将只打印 C 类型名称 我希望能够调用我的通用函数print type name适用于任何类型的函数 包括同时使用多种类型 可变参数 template
  • 如何使用 C# 读取/加载 datagridview 中的文本 (*.txt) 文件值?

    谁能帮我 在这里 我需要在我的 datagridview 中读取 加载文本 txt 文件值 这是我需要加载的示例文本文件 S NO Data1 Data2 Data3 Data4 Data5 Data6 Data7 Data8 Data9
  • Sphinx 中类链接的缩写名称

    seealso Class class apps business models Department Explanation goes here GNU tar manual Basic Tar Format
  • 如何使用 TXMLDocument 将名称空间前缀添加到每个节点

    我使用 XML 绑定向导创建了 TXMLDocument 的后代 此类生成的文件将在根节点中声明名称空间 并为文档的其余部分创建简单的 未经修饰的节点
  • 带有外语数字字段的 MS Access 数据库

    我有一个 MS Access 2007 数据库 我在哥伦比亚和厄瓜多尔的一些客户遇到了一个问题 我相信还会出现更多问题 他们的编号格式与美国不同 他们使用 小数点 或句点 字符作为百万和千位分隔符 并使用 逗号字符作为小数位 这要么导致类型
  • 从嵌套对象数组中删除对象 mongodb

    我收集了包含志愿者信息的集合 并将志愿者列为对象数组 我可以显示每个志愿者的所有班次 但从数组中删除一个对我来说很困难 样本数据 id ObjectId 59180305c19dbaa4ecd9ee59 where Merchandise
  • 如何使用具有相应别名的java代码在密钥库中仅存储公钥?

    我已经创建了密钥库 我只想在密钥库中存储公钥 并且不想存储私钥 因为私钥将位于客户端设备中 并且他将使用rest API共享公钥 另外 我应该如何在一个密钥库中保留多个公钥 具有不同的别名 如果有人有示例代码或示例链接 那将对我很有帮助 这
  • Java 中可靠且快速的 FFT [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 因为我不想自己做 所以我正在寻找一个好的 Java 的 FFT 实现 首先我在这里使用这个FFT普林斯顿但它使用对象 我的分析器告诉我 由于这个事实 它并不是很快 于是我又用谷歌搜索
  • 使用VSTO读取Excel中的ActiveCell内容

    我正在尝试从 Excel 加载项中读取 ActiveCell 但没有走得太远 有人有什么想法吗 Excel Window W this Application ActiveWindow as Excel Window Excel Range
  • 上传图片MVC始终为空

    大家好 我正在尝试上传一个简单的图像 但 HttpPostedFileBase 始终保持为空 这是我的代码 我不知道我做错了什么 这是我在设计视图中的代码 fieldset legend PictureModel legend div cl
  • 常量和 Matlab Coder

    在 Matlab Coder 中运行时 某些函数要求输入为常量 我希望找到一种方法在输入之前将输入声明为常量作为有问题的情况的示例 function foo subsubfunction x y B A butter 1 x y 这将返回错
  • 将地图图钉添加到 Google 地图 Android 的最佳方法

    我已成功添加图钉 但当用户单击地图并提供新位置时需要刷新图钉 我收到错误 请记住 我需要在后台发生此操作 以便它不会影响地图交互 我的问题是 当用户单击地图时 地图图钉列表已经更新 我得到一个ConcurrentModificationEx
  • 使用 HTML5 设置视频播放时长

    我有一个使用 TimeJump js 的简单 HTML5 视频播放器 http davatron5000 github io TimeJump 以允许直接跳转到特定时间代码 IE 跳转到视频的第 25 分钟 我想添加对视频播放时长的限制 因
  • 上传文件[重复]

    这个问题在这里已经有答案了 可能的重复 如何在网页上实现文件上传进度条 Hello 我见过很多网页 用户可以上传文件 并且会得到某种进度作为视觉反馈 水平条 百分比等 我的 html 表单是
  • 通过连接传播 pandas 系列元数据

    我希望能够将元数据附加到一系列数据帧 特别是原始文件名 以便在加入两个数据帧后我可以看到有关每个系列来自何处的元数据 我看到 github 问题有关 metadata here here 包括一些与当前相关的 metadata属性 here
  • 从 .odt 文件填充 QTextDocument

    我正在使用 C 和 Qt 编写一个富文本编辑器 目前 我希望它支持 至少 odt 格式 我发现 QTextDocumentWriter 用于将 QTextDocument 的内容写入文件 但我似乎找不到任何东西可以将其读回到 QTextDo
  • 从类外部访问类属性

    假设我有以下课程 class MyClass public function Talk Say Something return Say 然后我启动了该类的一个实例 Inst new MyClass 现在 我如何在 MyClass 之外调用
  • Pandas 非常简单 分组总大小的百分比

    我在看似极其简单的操作中遇到了麻烦 通过诸如此类的操作从组中获取总数百分比的最简洁方法是什么df groupby col1 size 分组后我的 DF 看起来像这样 我只想要总数的百分比 我记得过去使用过此语句的变体 但现在无法使其工作 p
  • PHP 短标签可以使用吗?

    这是信息根据官方文档 有四对不同的 可以是开始和结束标签 在 PHP 中使用 其中两个 and 随时可用 另外两个 是短标签和 ASP 样式标签 并且 可以从打开和关闭 php ini 配置文件 像这样 虽然有些人发现短标签并且 ASP风格
  • 如何防止过度打字

    我正在尝试用 C 制作一个简单的聊天应用程序 它可以工作 但是 如果有人在其他人打字时输入某些内容 它就像写了他们正在输入的内容 我链接了图片作为下面的示例 我用于客户端和服务器的代码可以在这里找到 Client Server 图片 Bef