(原创)
这两天打算用UDP传输文件的 test,下午大概测试了一下,可以实现两台计算机之间的UDP传输.但还有些小问题,估计明天再调试一下,UDP这块就告一段落了.
主要思想步骤如下:
1.假如现在有两个类,一个叫FileSender, 另一个类叫FileAccepter(接收文件),
当FileSender要传送给FileAccepter文件时,他首先发一个信息包(MyPakcet),里面包含着文件信息如文件大小,FileAccepter收到就弹出对话框访问用户是否接受文件,当FileAccepter点击接收文件之后,FileAccepter端就开始发出一个(MyPakcet)包,表示响应并且接受文件的接收.这时假定FileSender接收到响应,然后两者就开始建立连接.
FileSender专门启一个线程发数据包,而FileAccepter专门启一个线程在接收数据包.
它们之间传送的数据包用MyPacket;
下面看看个人定义的MyPakcet数据包:
MyPacket{
private int type;//消息类型
private Datable datable;//消息内容,它是一个抽象类,任何消息类型都是它的子类,包括传输文件的数据包
}
传输文件的数据包定义如下:
FileData extends Datable implements Serializable{
public static final long SerializationUID = 20071010L;//
private byte[] data;//数据
//此类还有两个转换方法分别是将byte[]转换为MyPacket对象,和MyPacket转换为byte[]
// 大家可以自己去实现
public static MyPacket getMyPacket(byte[]){
}
public static byte[] getByteArray(MyPakcet m){
}
}
传输文件时,文件信息包如下:
FileInfoData extends Datable implements Serializable{
......
//文件信息
private String fileName;
private int count;//文件分成几块
private long length;//文件的大小
}
上面所写的这两个类FileInfoData和FileData都是Datable的子类,
当我们发送数据时都是以包MyPakcet封装在DatagramPacket里发送出去的,接收时同样又把收到的byte[]还原成MyPakcet对象.这样就可以实现相互之间的通信.
希望以上这些能对那些初入UDP的学者能有点帮助.