使用socket试图保持长连接遇到的错误

  笔者是一个初学者,写本文前还不知道长连接一词,只是在做关于socket的练习时,希望服务端和客户端使用一个socket进行多次数据的传输,但是发现一个问题,如果一端使用socket发送数据后不使用   socket.shutdownOutput();去关闭输出,接受端就会一直卡死在接受处。查资料发现,这个方法会为发送的数据添加一个结束标志,也就是-1,如果不加就会缺失这个标志,接收端就会一直认为发送端没有结束发送,导致卡死在接收数据处。同样的,直接使用socket.close()也会添加这个结束标志,二者却别在于前者只关闭了输出,后者关闭了整个连接(即使同时shutdownInput和showdownOutput也没有关闭连接,只是关闭了这个连接发送和接受数据的能力)而使用了socket.shutdownOutput()之后,该socket是无法再次getOutputStream的,也就无法再次发送数据,因此通过简单的方式实现长连接是不可能的。必须要加上心跳包一类的东西,这就触及到了笔者这个初学者的知识盲区。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值