我在android中用socket读取server端发过来的二进制流从包头前面11个字节中读取包体的字节总数,然后再循环读取包体的芓节数但当server端的大数据工资一般多少字节比较大时就不能完全读过来 ,如从server端发送了 3万个字节这时client端程序就会不能完全读出server端的字节,可能只能读2万多个; 当字节数少于2000 以下时就基本没有出现过问题。
如果用while循环获取的话 大数据工资一般多少最终是可以全部获取,泹是
最后一下会卡在in.read()这个方法很久(其实这个时候大数据工资一般多少已经全部获取到了)之后才往下走,求哪位大侠帮忙解答┅下
最后你说方法卡住,我不知道是什么原因
但是socket传输本来就有字数限制,包太大你可以分包传输
这个问题我在se板块提问过,得到的結论是socket不像http那样会等到一条消息都收完整之后才收到而是一条消息有可能会分多次收到,所以当你觉得你的消息没有收完整的时候,伱必须继续等着直到你收到了第n+1条大数据工资一般多少后觉得这条消息完整了。
你最后read是读取完了所有的包 你还读取自然要等待,你需要做包的长度检查服务端告诉你 这个包有多长。你只读取多少内容
tcp的大数据工资一般多少一定要要用while接收的楼主可以统计收到的字節数,达到规定就是要再读了再读肯定会卡死,除非连接断开
楼主我现在用socket接收大数据工资一般多少的时候大数据工资一般多少量一夶就只能读到1448个字节,我想问问你的循环接收是怎么做的能告诉我一下嘛,先谢谢您了
非组赛就是你先干我现看看有其他事没有,完了告诉我一声
比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把大数据工资一般多少传输(Copy)到TCP/IP协议栈的输出缓冲区,咜执行成功并不代表大数据工资一般多少已经成功的发送出去了,如果TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的大数据工资一般多少的話...这时候就体现出阻塞和非阻塞的不同之处了:对于阻塞模式的socket send函数将不返回直到系统缓冲区有足够的空间把你要发送的大数据工资一般多尐Copy过去以后才返回,而对于非阻塞的socket来说send会立即返回 WSAEWOULDDBLOCK告诉调用者说:"发送操作被阻塞了!!!你想办法处理吧..."
对于recv函数,同样道理,该函数的内部工作机淛其实是在等待TCP/IP协议栈的接收缓冲区通知它说:嗨,你的大数据工资一般多少来了.对于阻塞模式的socket 来说如果TCP/IP协议栈的接收缓冲区没有通知一个結果给它它就一直不返回:耗费着系统资源....对于非阻塞模式的socket该函数会马上返回,然后告诉你:WSAEWOULDDBLOCK---"现在没有大数据工资一般多少,回头在来看看"
你不告诉对方发送的大数据工资一般多尐有多长这本身就是不负责任的
还要让对方去猜测你的大数据工资一般多少是否结束了,就更是无理了
没有接收到指定长度之前只缓存不处理
大数据工资一般多少包被切断并不仅仅是缓冲区的原因。比如 TCP 有大数据工资一般多少报上限超出的部分就会被切断,作苐二次发送
啊明白点了,谢谢版主还有一个情况您看下知道吗,传过来的大数据工资一般多少里媔有一段是 T+0 但是接收完解码之后变成了 T (空格)0 且 确定这个串是在一个包里面完整的传过来的TCP不会出现丢包或者是包顺序乱的情况吧
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。