黑马程序员Java学习笔记之使用UDP通信传输自定义类
来源:互联网 发布:淘宝卖家购物车营销 编辑:程序博客网 时间:2024/05/01 07:16
-------android培训、java培训、期待与您交流! ----------
这里其实还是流的相关操作,用ObjectInputStream和ObjectOutputStream,先将类进行序列化,转换成字节数组,再传输,传输后再执行反序列化还原成类。
首先定义一个Student类:
package TestNP;import java.io.Serializable;import java.util.HashMap;import java.util.Map;/** * Created by za on 2015/7/27. */public class TestStudent implements Serializable { private int id; private String name; private int age; private HashMap<String, Integer> scores; public TestStudent() { } public TestStudent(int id, String name, int age, HashMap<String, Integer> scores) { this.id = id; this.name = name; this.age = age; this.scores = scores; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public HashMap<String, Integer> getScores() { return scores; } public void setScores(HashMap<String, Integer> scores) { this.scores = scores; } @Override public String toString() { return "TestStudent{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", scores=" + scores + '}'; }}
在客户端对该类的一个对象进行序列化,转换成字节数组:
package TestNP;import java.io.*;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetSocketAddress;import java.net.SocketException;import java.util.HashMap;import java.util.Map;/** * UDP客户端 * 测试传输一个Student类 * 使用序列化和反序列化 IO流 * Created by za on 2015/7/27. */public class MyClient { public static void main(String[] args) { try { //第一步:创建客户端 + 端口(因为在同一台电脑所以端口不要冲突) DatagramSocket client = new DatagramSocket(6666); //第二步:准备数据 /*String msg = "测试数据aaaasdifjei"; byte[] data = msg.getBytes();*/ HashMap<String, Integer> scoresA = new HashMap<String, Integer>(); scoresA.put("Java", 95); scoresA.put("C++", 80); scoresA.put("Python", 90); TestStudent ts = new TestStudent(1001, "John", 25, scoresA); byte[] data = convert(ts); //第三步:打包并制定发送的地点和端口 DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("127.0.0.1", 8888)); //第四步:发送数据 client.send(packet); //第五步:释放资源 client.close(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static byte[] convert(TestStudent ts) { byte[] data = null; try { //建立一个临时字节数组 data = null; //选择序列化用的流 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream( new BufferedOutputStream(bos)); oos.writeObject(ts); oos.flush(); //获取数据 data = bos.toByteArray(); oos.close(); bos.close(); } catch (IOException e) { e.printStackTrace(); } //返回byte[] return data; }}
在服务端进行解析,并还原成一个Student类对象:
package TestNP;import java.io.*;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;/** * UDP服务端 * 解析一个int类型数组 * Created by za on 2015/7/27. */public class MyServer { public static void main(String[] args) { try { //第一步,创建服务端 + 端口 DatagramSocket server = new DatagramSocket(8888); //第二步,准备接收容器 byte[] container = new byte[1024]; //第三步,打包封装 DatagramPacket packet = new DatagramPacket(container, container.length); //第四步,接收数据 server.receive(packet); //第五步,分析数据 byte[] data = packet.getData(); //拿到传过来的byte[]数组 TestStudent ts = resolve(data); //调用resolve方法得到返回的对象 System.out.println(ts); //输出结果,TestStudent{id=1001, name='John', age=25, scores={Java=95, C++=80, Python=90}} //第六步,释放资源 server.close(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static TestStudent resolve(byte[] data) { //建立一个TestStudent对象用于接受解析好的对象 TestStudent ts = null; try { //选择流,此时可以匿名使用ByteArrayInputStream ObjectInputStream ois = new ObjectInputStream( new BufferedInputStream( new ByteArrayInputStream(data))); ts = (TestStudent) ois.readObject(); //读出,强转,赋值给ts ois.close(); //关闭流 } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return ts; //返回ts对象 }}
其实网络通讯最重要的还是对流的掌握和理解。
0 0
- 黑马程序员Java学习笔记之使用UDP通信传输自定义类
- 黑马程序员 【】java学习之路——网络编程之UDP传输简析
- 黑马程序员 【】java学习之路——网络编程 UDP 键盘录入传输
- 黑马程序员:网络编程之UDP传输
- 黑马程序员:网络编程之UDP传输
- 黑马程序员---UDP传输
- 黑马程序员之java线程通信学习
- 黑马程序员_网络编程UDP之学习笔记
- 黑马程序员--UDP通信
- 黑马程序员-网络编程之UDP传输小总结
- 黑马程序员——网络编程之UDP传输
- Java学习笔记 UDP协议传输信息
- 黑马程序员 Java网络传输UDP和TCP协议
- 黑马程序员——java UDP传输演示
- 黑马程序员——自学笔记15(网络传输2—UDP传输和TCP传输)
- 黑马程序员------java学习笔记之集合
- 黑马程序员------java学习笔记之数据结构
- 黑马程序员------java学习笔记之反射
- 如何判断Fragment是否展示
- 1513 Palindrome【lcs】
- iOS二维码的使用
- 线程私有数据实现的原理
- Pear、PHPUnit安装
- 黑马程序员Java学习笔记之使用UDP通信传输自定义类
- 重写toString以及equals方法
- Android(Java) 模拟登录知乎并抓取用户信息
- CentOS/SMTP服务器的构建
- Eclipse去除js(JavaScript)验证错误介绍
- RPG2.0战斗框架学习3之技能镜头效果
- C++_布局(placement)new操作符
- hdu1394Minimum Inversion Number逆序数
- Eclipse的java代码出错:The import XXXX cannot be resolved