socket丢包

摘录于javaeye的问答:

 

问题描述:一个服务端,一个客户端。客户端往服务端传文件,具体 细节不说了,客户端发给服务端的是文件处理后的定长数据报文(由 数据报文头和数据报文体组成,其中报文头里约定了客户端发送多少 个定长报文后,服务端要往回发一个确认包,然后客户端才继续发送 定长报文)。服务端每接收一个数据报文先对其处理(拆包,写入文 件等),然后接收下一包,如果到了约定发送确认包的数量时发送一 个确认包给客户端。

 

问题:在传小文件的时候没问题,但是在文件稍大一些的时候(4-10M )就出问题。我现在发送的报文是两包一个确认,问题出现在服务器 接收每批第2包的时候,收不到数据,但是客户端那边显示已经发送, 正等待确认,所以陷入了阻塞。但是这个问题不是一直出现,每次出 现也不是在固定的位置。不知问题出现在哪儿?
 
抓出来的包:

 
该问题已经关闭: 今天终于找到问题所在了,因为我在每次接收一包数据的时候都是new一个DataInputStream,
服务器发送的快的时候可能在我new一个输入流之前已经发了数据,而我还没有得到输入流,这样就造成了丢包现
象。 我在服务器端发送的时候加一个延时,出错的概率就会减少。但在我们不能控制服务端的时候这个方式就不好了。
 所以最好的解决办法就是我们在建立Socket连接的时候,就取得输入、输出流。在以后每次收发数据的时候就一直用这个输入输出流,
 这样在批次确认的数据传输中就不会有丢包了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值