public void run() {
try {
// 读取输入流,如果由于流末尾已到达而不再有数据,则返回 -1,表示对方已经关闭.
BufferedInputStream bufInput = new BufferedInputStream(in);
streamData = new ByteArrayOutputStream();
//服务器接收流,如果对方的流永不断开,while无法结束,
//也不能进行数据加工处理,我想能否在流读取部分完整数据后,分批处理。
//这样就算流不断,我也可以边读,边处理数据。不知道怎么写好?
while ((len = bufInput.read(b)) != -1) {
streamData.write(b, 0, len);
}
bufInput.close();
in.close();
socket.close();
// 获取数据流后,把数据交给处理流数据对象,使得读取数据与处理数据分离.
if(streamData.size()>0){
new Thread(new ProcessRequestData(clientClass,cSupport,streamData)).start();
}else{
System.out.println("收到数据流数据内容为 0 字节.");
streamData.close();
}
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException io) {
io.printStackTrace();
} finally{
ReleaseResource();
}
}
1. XXX突发事件报文EB90F5
类型及长度 含义
1 Char(1) EB
2 Char(1) 90
3 Char(1) 报文字节顺序(sun: 1,alpha: 0, pc: 0)
4 Char(1) F5
5 Char(1) 年(从1990年起计数)
6 Char(1) 月
7 Char(1) 日
8 Char(1) 时
9 Char(1) 分
10 Char(1) 秒
11 Short(2) 个数M
12 Short(2) 编号
13 char(12) 编号,数据类型也可以是Int
14 Short(2) 数据类型也可以是Int
15 Char(1) xxx状态(开始:0, 结束:1)
注:1). 域1至域2循环3次;
2).域12至域15循环M次;
总不能把数据标志写死吧?三次 :EB90EB90EB90,这样不行吧?
怎么样让这个服务程序通用?
怎么记程序读一部分,处理一部分?这是这边读,另一边看读到的内容,并处理?
1 收到 S
2 把S的流 in out分成二份,a读,写S; b写s,做成两个线程,
读出来放在一个缓存队例(因为可能一次读不完(我一次1024byte),
别一个取算是队列数据,从队里出来,判断,如果长度不够,再取下包(1024)数据,合起来(多余的数据可能是别一批数据开头,要保存)
3 验正数据,如果正确,把读得的数据发给处理逻辑线程。