Skip to content

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

@datochan

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. 构造了一个只有封包头的空封包, 每次发送完之后,再发送一个只有封包头的空封包,问题暂时解决。

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

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