相关文章推荐
input = new DataInputStream(is); input.read(b);

当时当我用这样的方法接收数据的时候发现接收的数据不全,于是我在read里加了个while循环,当read(b)返回-1的时候说明数据已经接收完了,没有可接收的数据,数据地区接收完了,但又有一个新的问题,每次都会抛出一个EOFException异常,导致socket通讯终端。百度了一下,发现这个是一个正常的读金数据结束的异常。

那怎么?于是看了一下DataInputStream的API,发现里面有一个readFully(b)的方法,修改之后果然问题解决了。

然后百度了一下这两个方法的却别:

readFully(byte[] b) 要求读出的字节长度与byte[]的长度相同;

read(byte[] b)可能不会读满就会返回;

如果在通讯协议中,明确知道需要读取多少字节,可以采用readFully方法

问题解决,虽然问题很简单,但的确很容易碰到,在此记录引以为戒,哈哈

当我们通过socket进行通讯的时候,接收数据,大家一贯的写法可能是下面这样的 //接收数据 byte[] b = new byte[len]; is = socket.getInputStream(); input = new DataInputStream(is); input.read(b);.
本文实例讲述了 Android 实现TCP客户端 接收数据 的方法。分享给大家供大家参考,具体如下: 配合log4net 使用 ,用来接收调试信息。因此,此客户端只管通过TCP接收字符串数据,然后显示在界面上。 接收TCP数据 try { Socket s = new Socket (192.168.1.5, 8240); InputStream inputStream = s.get InputStream (); Data InputStream input = new Data InputStream ( inputStream ); byte[] b = new byte[10000]; 我们系统调用银行核心接口, 通讯 方式是 Socket ,报文格式是XML。 业务量少时,正常,但是我们发起批量操作时,明明核心转账成功的,但是我们解析回执,认为转账失败。 这种情况首先排查接收报文,报文是类似这样的(真实报文内容不是这样的): 错误的回执二、解决思路 1. 从源头出发 遇到这个...
import java.io. Data InputStream ; import java.io. Data OutputStream; import java.io.IOException; import java.io. InputStream ; import java.net.Server Socket ; import java.net.So...
无论文件读取还是 Socket 通信,都要操作流。Java为我们提供了 InputStream 和OutputStream的IO库,从数据流 InputStream 读取数据时,有三种读取的方法,方法二、三本质是一样的。三种方法都返回int型,同时能够抛出IOException异常 read() read(byte[] b) read(byte[] b, int off, int len) read() 从输入流读取下一个字节,读取的返回值为该字节的int值(0~255)。如果读到流的末尾,返回-1。方法会一
Server Socket socket =new Server Socket (6666); while(true){ Socket socket 1= socket .accept(); /* OutputS... import java.io. Data InputStream ; import java.io. Data OutputStream; import java.io.IOException; import java.io. InputStream ; import java.net.Server Socket ; import java.net.So...
 
推荐文章