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...