Skip to content

请教ITcpClient::Send会挤压一个封包不发送的问题 #323

Description

@datochan
  • 系统环境: win11 25H2 x64

  • 编译环境: vs2022, X86 dll方式链接到项目中

  • 问题描述:除了第一个封包能及时发送,后面的发送都会压一个,比如第一个封包发送后,第二个封包就在缓存中不发送,发送第三个封包时就将第二个封包实际发送出去,再将三个封包放入缓存...

  • 尝试的解决方法:

  1. 调用: ITcpClient::start(ip, port, false), 将第三个参数设置为false 同步方式通讯,问题也没解决。
  2. HP_Create_TcpClient创建实例后,或者OnConnect回调函数中 设置 SetNoDelay(TRUE); 程序报 EXCEPTION_ACCESS_VIOLATION 写入异常; ITcpClient::start() 执行成功之后,再设置SetNoDelay(TRUE);成功,但是问题没解决 。
  3. 调用: ITcpClient::GetPendingDataLength(), 发现未发送的数据长度刚好就是调用ITcpClient::Send函数发送的数据大小。
  4. 等待超过两分钟,不会等超时或者发送心跳封包时将缓存中的数据发送出去。
  5. 构造了一个只有封包头的空封包, 每次发送完之后,再发送一个只有封包头的空封包,问题暂时解决。

可是这种多发送一个空封包的方法并不完美,所以过来请教一下,我这个问题是否有别人也遇到?是否有更好的解决办法?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions