历史未解决技术问题记录(01)- Windows socket 发送后对方收不到的问题

多年前遇到的问题:在 编写IE 的 ActiveX 插件,有个功能是 传递文件给 Java 服务器。

当时要求自己读取指定文件,然后用 Socket 发送,ip,port 也由 ActiveX 暴露的方法参数列表中指定。

当时约定的细节就是,我发送一段数据包,服务端收到后给我返回一个【确认】包。

问题就是在我写完后,Java方发现文件最后一部分一直传不上来,Java方面一直在等待。

经过调试诊断,发现我方也一直在等待服务器的【确认】。最后得出结论,我最后一个 send 函数调用成功,但是数据应该还在本机,没有通过网络发送出去。

最后没办法,加了一个【推送】类型数据包,啥作用也没有,就是为了“推送前一个数据包出去”,最后一个send【推送】包后,直接关闭 socket。

当时水平低,也没有在其他机器环境上进行各种试验,所以到现在也不知道最根本的原因和最优解决方式是什么。

● 之后也看过一些框架库,看他们初始化的时候,也没什么特殊操作,过后怀疑可能是没有设置 心跳 keep alive 的问题,可惜没法验证了

● 前些日子,看到一个提及 Nagle 算法的帖子,结合各个回复,总结如下:1.禁用nagle.  2.设置0 sndbuf缓冲区

记录下来,期待以后再遇到再验证了……

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值