C 套接字客户端/服务器滞后

2024-05-13

我正在编写一个 C/C++ 客户端/服务器套接字应用程序。此时,客户端每 50 毫秒连接一次服务器并发送一条消息。

一切似乎都正常,但数据流并不连续:突然,服务器不再收到任何消息,然后一次收到 5 条消息......有时一切正常......

有人知道这种奇怪行为的起源吗?

部分代码:

Client:

while (true)
{
if (SDL_GetTicks()-time>=50)
{
socket = new socket();
socket->write("blah");
message.clear();
message = socket->read();
socket->close();
delete socket;
time=SDL_GetTicks();
}
}

Server:

while (true) {
fd_set readfs;
struct timeval timeout={0,0};
FD_ZERO(&readfs);
FD_SET(sock, &readfs);
select(sock + 1, &readfs, NULL, NULL, &timeout)
if(FD_ISSET(sock, &readfs))
{
SOCKADDR_IN csin;
socklen_t crecsize = sizeof csin;
SOCKET csock = accept(sock, (SOCKADDR *) &csin, &crecsize);
sock_err = send(csock, buffer, 32, 0);
closesocket(csock);
}
}

Edits: 1. I tried to do

int flag = 1;
setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof flag);

在客户端和服务器端,但问题仍然存在。

2.是的,这些连接/断开连接效率非常低,但是当我尝试编写时

socket = new socket();
while (true)
{
if (SDL_GetTicks()-time>=50)
{
socket->write("blah");
message.clear();
message = socket->read();
time=SDL_GetTicks();
}
}

那么消息只发送一次(或接收)......


这就是所谓的“内格尔延迟 http://en.wikipedia.org/wiki/Nagle's_algorithm“。该算法在 TCP 堆栈上等待更多数据到达,然后再实际向网络发送任何内容,直到超时为止。因此您应该修改 Nagle 超时(http://fourier.su/index.php?topic=249.0 http://fourier.su/index.php?topic=249.0)或完全禁用 Nagle 延迟(http://www.unixguide.net/network/socketfaq/2.16.shtml http://www.unixguide.net/network/socketfaq/2.16.shtml),因此数据将按照send call.

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

C 套接字客户端/服务器滞后 的相关文章

  • Qt 和 Sqlite 示例

    我正在寻找一些使用 Qt 的示例代码 它是带有 Sqlite 驱动程序的 SQL 模块 我需要示例的主要原因是我之前有 Qt 数据库接口的经验 并且 Sqlite 在字段类型方面有一些奇怪的行为 类型是按字段存储的 而不是按列存储的 The
  • 从服务器下载图像(cUrl,但接受建议)C++

    我试图通过从服务器 网站 下载图像来设置旋转背景图像 并尝试使用curl 来执行此操作 但是在执行此操作方面取得了0 成功 我的代码的 缩短的 版本如下 我没有收到错误 但是 如何 临时 保存该图像以将其显示为背景 是否有图像 类型变量 或
  • StackExchange Redis 删除所有以以下开头的键

    我有一个格式的密钥 Error 1 Error 24 Error 32 Using StackExchange Redis 我该怎么办KeyDelete在与格式匹配的所有键上Error 在另一个答案中我看到了 LUA 脚本 EVAL ret
  • 地图类容器的专用功能

    我想要专门为矢量和地图之类的容器设计一个函数模板 对于向量 我可以像下面那样做 但我不知道如何才能有一个专门版本的函数 该函数仅用于像地图这样的容器 include
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 没有配置身份验证处理程序来处理该方案

    这是一个非常烦人的问题 我在我的 asp net core 项目上设置 cookie 身份验证 有时会出现此错误 有时不会 没有图案 它只是开始抛出错误 然后突然停止 然后再次开始 例外情况是 InvalidOperationExcepti
  • 使用 C 的另一个结构内的灵活长度结构数组

    你好 我正在尝试使用 C 来实现一个简单的结构 2 个盒子 每个盒子包含不同数量的颗粒 main 中传递的粒子的确切数量 我写了以下代码 typedef struct Particle float x float y float vx fl
  • 如何配置 Ninject 来注入 NodaTime IClock

    在我的 NinjectConfigurator 中我有 container Bind
  • 如何反序列化 XML 文档

    如何反序列化此 XML 文档
  • 如何在 Google Mock 中使用可选参数来模拟方法?

    如何使用可选参数模拟方法谷歌模拟 例如 class A public void set enable bool enabled true class MockA public A MOCK METHOD1 set enable void b
  • 我应该使用字节还是int?

    我记得曾在某处读到 即使您只需要字节 使用 Int32 更好 就性能而言 它 据说 仅适用于您不关心存储的情况 这是有效的吗 例如 我需要一个保存一周中某一天的变量 我是吗 int dayOfWeek or byte dayOfWeek E
  • 现代编译器的 C++ 中“memset”功能的状态

    Context 不久前 我偶然发现了 Alexandrescu 在 2001 年发表的 DDJ 文章 http www ddj com cpp 184403799 http www ddj com cpp 184403799 它是关于比较将
  • 对象变空似乎是 Hangfire 中的反序列化问题

    Hangfire 似乎无法反序列化我的原始版本Scheduler对象及其所有状态 我正在调用其 Execute 方法BackgroundJob Enqueue 如下所示 Scheduler new FileInFileOut FileIn
  • 模板类中模板方法专门化的 clang 自动返回类型错误?

    试图理解另一个问题 https stackoverflow com questions 38054055 clang fails to compile template function with auto return type insi
  • 结构大小与 typedef 版本不同?

    我的代码中有以下结构声明和 typedef struct blockHeaderStruct bool allocated unsigned int length typedef struct blockHeaderStruct block
  • Microsoft Visual Studio 2017 中的 wxWidgets 设置

    我花了大约 20 个小时试图弄清楚如何在 Microsoft Visual Studio 2017 中设置 wxWidgets 我遵循 https wiki wxwidgets org Microsoft Visual C 2B 2B Gu
  • TCP/IP 传输期间套接字数据损坏

    当我通过预连接的 TCP IP 套接字发送数据时 我发现数据已损坏 Example Station1 正在向 Station2 发送数据 我已经在发送之前 在 S1 和接收之后 在 S2 打印了数据 以下是消息 S1 发送的数据是ACKS2
  • asio::this_coro::executor 的实现是什么

    在协程函数中 我们可以添加auto ex co await asio this coro executor 获取该协程的执行者 但当我想了解它的定义时 我发现了这个 Awaitable type that returns the execu
  • C 中的等效 plpgsql 触发器

    我有一个 PostgreSQL 9 0 服务器 并且在某些表上使用继承 因此我必须通过如下触发器模拟外键 CREATE OR REPLACE FUNCTION othertable before update trigger RETURNS
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web

随机推荐

  • System.Web.Mvc.HtmlHelper 不包含以下定义

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 关于编辑可变长度列
  • removeIf 实现细节

    我有一个我无法理解的小实施细节问题ArrayList removeIf 我认为我不能在没有先决条件的情况下简单地这么说 因此 实施基本上是bulk remove 不像ArrayList remove 一个例子应该会让事情更容易理解 假设我有
  • 如何覆盖应用程序中的内部框架方法(框架外部)

    在 Swift 中子类化时是否有重写内部框架方法 前任 超类 public class BarChartRenderer ChartDataRendererBase internal func drawDataSet context con
  • 固定大小集以包含给定集的最大数量

    我有大约 1000 组尺寸 1 4 1 3 3 5 6 4 5 6 7 5 25 42 67 100 是否有可能找到包含最大数量的给定集合的大小为 20 的集合 检查每一个100 80 20 集 效率低下 我不太确定这是 NP 完全的 考虑
  • JOOQ 查询 JOIN ON WITH 子句

    如何编写 JOOQ 查询来连接 with 子句中的字段 例如 我尝试过 create with a as select val 1 as x val a as y select from tableByName a join ANOTHER
  • 如何在android中实现页面翻转/翻转/卷曲效果[重复]

    这个问题在这里已经有答案了 可能的重复 在android上实现页面卷曲 https stackoverflow com questions 3912849 implement page curl on android 如何在android中
  • 在 MongoDB 中,如何根据嵌入对象中的属性对文档进行排序?

    在我的产品集合中 我可以找到已在 GB 地区发布的所有产品 gt db products find release region GB pretty id foo release region GB date ISODate 2012 03
  • matlab部署工具到java包javac错误

    我正在尝试将我的程序包装为与 java 一起使用 我首先尝试了一个简单的 hello world 你好世界 m disp 你好世界 我使用了deploytool并选择了java包 当它到达这一行时 执行命令 javac verbose cl
  • Linq 到自定义 SQL

    好的 我有一个带有巨大表的数据库 超过 100 万条记录和 50 多个列 我知道它不是最佳的 但它是我必须处理的 所以我需要运行限制返回数据量的查询 现在我的问题是这样的 我有一些运行并返回数据的自定义查询 用户可以通过选择将生成谓词模板并
  • 别名 .\SQLEXPRESS 为 (LocalDB)\MSSQLLocalDB

    I have SQLEXPRESS已安装 但代码假设我有一个名为 LocalDB MSSQLLocalDB 如何创建别名以便不必安装SQLLocalDb 启动 Sql Server 配置管理器 使用以下参数为 64 位 SQL Native
  • 失败:错误域=NSURLErrorDomain代码=-1004“无法连接到服务器。”

    首先 我想列出我已阅读并尝试实现答案的帖子 避免重复 iOS 9 和 iOS 10 中的应用程序传输安全问题 https stackoverflow com questions 40280936 app transport security
  • 使用 Yew 回调作为 wasm_bindgen 闭包

    这个问题是为 Yew v0 19 编写的 异步外部 JavaScript 函数可以通过以下方式在 Rust 中使用Closures https rustwasm github io wasm bindgen api wasm bindgen
  • 从 exe/as 服务运行 tomcat 时出现 NoClassDefFoundError: org/apache/catalina/startup/Bootstrap

    我已经通过startup bat运行Tomcat 6 0 37服务器相当长一段时间了 现在我想将tomcat作为一项服务运行 在机器启动时自动启动 我使用bat创建了服务 service bat install 这成功地创建了服务 当尝试启
  • Java - Runtime.getRuntime().exec() 发生了什么?

    我在 Java 中遇到 Runtime exec 问题 我的代码 String lol home pc example txt String b touch lol try Runtime getRuntime exec b catch E
  • 使用 libdl 的 C 插件架构

    我一直在尝试用 C 语言编写一个小型 IRC 框架 现在我将扩展它的一些核心功能 但除此之外 我希望它可以通过插件进行扩展 到目前为止 每当我写一些与 IRC 相关的东西 我写了很多东西 现在大约有 6 种不同的语言 我很着火 并且实际上继
  • 如何反思 PEP 484 类型提示?

    我观察到对于以下功能 def foo x int gt List int return x 1 可以使用表达式获取注释信息foo annotations 这产生 x
  • for 循环初始值设定项中的结构

    知道为什么 for 循环初始值设定项中的这个结构表达式在编译时会出现语法错误吗 在这种情况下 指向结构的指针工作正常 但 ofc 我需要如下所示的局部变量 感谢您的建议 type Request struct id int line byt
  • 如何使用 RODBC 将数据帧保存到数据库生成的主键表

    我想使用 R 脚本将数据框输入到数据库中的现有表中 并且希望数据库中的表具有顺序主键 我的问题是 RODBC 似乎不允许主键约束 这是创建我想要的表的 SQL CREATE TABLE dbo results ID INT IDENTITY
  • 从 DataGridViewCell 获取数值?

    我正在尝试从 a 中检索数值DataGridView 到目前为止 我发现的唯一方法是将它们作为字符串检索并将它们转换为数字 Convert ToDouble MyGrid SelectedRows 0 Cells 0 Value ToStr
  • C 套接字客户端/服务器滞后

    我正在编写一个 C C 客户端 服务器套接字应用程序 此时 客户端每 50 毫秒连接一次服务器并发送一条消息 一切似乎都正常 但数据流并不连续 突然 服务器不再收到任何消息 然后一次收到 5 条消息 有时一切正常 有人知道这种奇怪行为的起源