Socket发送定长数据遇到的问题(续)

背景:昨天在公司写了一遍定长数据的线程池模式的代码,今天在家再写一遍,可是在获取数据类型,也就是判断数据是否为心跳时出现了问题。

 

问题:

        我先发送数据长度,然后发送数据类型,最后发送数据。但是发现长度和数据本身都能接收到,但是数据类型无法接受到。

原因:

       具体的原因还未找到,我猜测可能是因为我数据类型和长度是分开发送的,服务端去读类型的时候,客户端还没有发送。

问题:

        客户端发送数据长度后,服务端接收不到,全部为0,但是Debug状态下能看到。

原因:

        因为我客户端是将int类型拆分成四次发送给服务端,而且因为数据长度不够,只有第四个字节有值,导致了服务端取前四个字节时,有值的第四个字节还没有发送,就会出现全部为0的情况,在服务端读取前添加一秒的睡眠后,发现问题解决。

解决方案:

       客户端发送信息是,分成两部分,一个是数据信息相关的数据(长度和类型),另一个是数据本身,现将相关信息一起发送,然后再将数据本身发送,这样就能避免了读取时还有数据未发送的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值