Java数据报之失序和丢包(2)

文章作者 100test 发表时间 2007:12:21 12:17:17
来源 100Test.Com百考试题网


* 对缓冲的数据包进行排序处理,即按顺序提取同一帧的数据,如果没有找到该序号的帧,则返回空值.
* @param sn int 要找的帧序号.
* @return DataEntry
*/
private DataEntry getSnData(int sn) {
DataEntry de = null.
for (int i = 0. i < al.size(). i ) {
de = (DataEntry) al.get(i).
if (header.getStreamsize() == de.getStreamsize()) {
if (sn == de.getSn())
break.
else
de = null.
}
}
return de.
}

/**
* 按序号开始向前或者是向后寻找最近的帧片段,日后可以增加请求重发功能,通过开一个通信连接.
* @param sn int
* @return DataEntry
*/
private DataEntry seachDeData(int sn) {
DataEntry de = null.
int initvalue, minvalue = 10000.
DataEntry back, fore = null.
for (int i = 0. i < al.size(). i ) {
de = (DataEntry) al.get(i).
if (header.getStreamsize() == de.getStreamsize()) {
initvalue = Math.abs(de.getSn() - sn).
if (de.getFragmentcounter() != de.getSn() &.&. initvalue < minvalue) {
minvalue = initvalue.
fore = de.
}
}
}
return fore.
}

/**
* 除去最后一帧外,随机抽取一帧.
* @return DataEntry
*/
private DataEntry seachDeData() {
DataEntry de = null.
for (int i = 0. i < al.size(). i ) {
de = (DataEntry) al.get(i).
System.out.println("sky ::::" de.getFragmentcounter() ":" de.getSn()
":" i).
if (header.getStreamsize() == de.getStreamsize()) {
if (de.getFragmentcounter() != de.getSn()) {
break.
}
}
}
return de.
}
/**
* 生成组装完的结果数据.因为用图像来做测试,所以令其返回图像.
* @return Image
*/
public java.awt.Image Gereratedata() {
ByteArrayInputStream bis.
java.awt.image.BufferedImage bimage = null.
try {
byte[] b = fetchDataPackets_sn().toByteArray().
//fetchDataPackets_old1()
bis = new ByteArrayInputStream(b).
bimage = javax.imageio.ImageIO.read(bis).

}
catch (Exception ex1) {
ex1.printStackTrace().
}
return bimage.
}

public static void main(String args[]) {
DataPacket dp = new DataPacket("e:\\nature\\14.jpg").
}
}
/**
* 数据实体,充当临时处理场所.
* @author Administrator
*
*/
class DataEntry {
byte[] bytes.
int fragmentcounter, sn, actbytesize.
long streamsize.
int minfragment.

public DataEntry() {

}

public DataEntry(int size) {
this.actbytesize = size.
}

public DataEntry(byte[] b, int i) {
this.bytes = b.
this.actbytesize = i.
}

public byte[] getByte() {
return this.bytes.
}

public void setBytes(byte[] b) {
this.bytes = b.
}

public void setStreamsize(long size) {
this.streamsize = size.
}

public long getStreamsize() {
return this.streamsize.
}

public int getMinfragment() {
return minfragment.
}

public synchronized void setSn(int i) {
this.sn = i.
}

public synchronized int getSn() {
return sn.
}

public synchronized int getFragmentcounter() {
return fragmentcounter.
}

public synchronized void setFragmentcounter(int c) {
this.fragmentcounter = c.
}

public void setActByteSize(int size) {
actbytesize = size.
}

public int getActByteSize() {
return actbytesize.
}

public String toString() {
return this.streamsize "::" this.fragmentcounter "::" this.sn
"::" this.actbytesize " recv DataEntry".
}
}
/**
* 报头,处理报头格式
* @author Administrator
*
*/
class PacketHeader implements Serializable{
public static final int HEADER_BUFFER_SIZE = 1024.
int fragmentcounter, sn.
int actbytesize = PacketBody.BODY_BUFFER_SIZE.
byte[] header. //= new byte[HEADER_BUFFER_SIZE].
long streamsize.
int minfragment.

public PacketHeader() {

}

public PacketHeader(long l) {
this.setStreamsize(l).

}

public PacketHeader(String s) {
String[] tm = s.split("::").
this.setActByteSize(Integer.parseInt(tm[3])).
this.setSn(Integer.parseInt(tm[2])).
this.setFragmentcounter(Integer.parseInt(tm[1])).
this.setStreamsize(Long.parseLong(tm[0])).
}

/**
* 根据文件的段的顺序生成数据头.
* @param sn 文件序列
*/


相关文章


Java数据报之失序和丢包(2)
Java数据报之失序和丢包(1)
Java中的Cla Loader与Package机制
在Java程序中处理数据库超时与死锁
J 、Servlet中的相对路径和绝对路径
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛