您的位置:首页 > 其它

UDP协议发送对象

2014-05-14 19:49 155 查看
我们知道将对象序列化后,通过ObjectOutputStream和ObjectInputStream可以把对象写入文件或从文件中读取对象,最近遇到使用UDP协议发送对象的问题,下面说说UDP怎么发送对象。

UDP数据包DatagramPacker只能发送字节数组,那我们想办法把对象转化为字节数组,JAVA中的类ByteArrayInputStream和ByteArrayOutputStream与ObjectOutputStream和ObjectInputStream结合可以实现:

发送方:

public void send(Information info){
if(info == null) return;
DatagramSocket sendSocket = null;
ByteArrayOutputStream byteout = new ByteArrayOutputStream();//创建字节输出流
ObjectOutputStream oStream = null;
try {
sendSocket = new DatagramSocket();
oStream = new ObjectOutputStream(byteout);
oStream.writeObject(info.getInfoDataString());//将对象写入byte[]中
oStream.flush();

byte[] buf = byteout.toByteArray();
DatagramPacket datagramPacket = new DatagramPacket(buf,0,buf.length , info.getAddress().getDstIp(), info.getAddress().getPort());
sendSocket.send(datagramPacket);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(byteout!=null)byteout.close();
if(oStream!=null) oStream.close();
if(sendSocket!=null) sendSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

接收方:
byte[] buf = new byte[1024*64];
DatagramPacket receivePacket = new DatagramPacket(buf, buf.length);
receiveSocket.receive(receivePacket);
InetAddress hostInfo = receivePacket.getAddress();//发送方信息
//接收消息
bytein = new ByteArrayInputStream(receivePacket.getData());
inputStream = new ObjectInputStream(bytein);
TextAttribute textAttribute = (TextAttribute)inputStream.readObject();


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UDP