Java serializable:套接字在网络上传送对象

来源:互联网 发布:修改数据导入考勤机 编辑:程序博客网 时间:2024/05/16 11:10

1.概念上的内容请参考,里面说的很详细了,包括什么时候用serializable,有什么特点等

http://www.2cto.com/kf/201405/305380.html

什么情况下需要序列化 

a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;

第一种情况和第二种很类似,这里贴上一个用套接字在网络上传送对象的例子

用套接字在网络上传送对象:

1.首先建立要传输的对象

//建立用来持续化的对象import java.io.Serializable;public class ObjectSeri implements Serializable{//成员变量写成static的话是不能被持久化的//private关键字是不能被持久化的,脱离了JVM,成员变量是不在JVM的安全机制之内private String name;private String age;public String getName() {return name;}public String getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(String age) {this.age = age;}}
2.有了传输的对象,下一步就是建立一个服务端线程来监听socket端口,并且在run方法里面实现读取对象的数据

import java.io.IOException;import java.io.ObjectInputStream;import java.net.ServerSocket;import java.net.Socket;//serverTest类继承thread类,监听端口来的信息public class serverTest extends Thread {//private final String serverIP = "127.0.0.1";private final int serverPort = 3400;private ServerSocket server;public serverTest() {try {// ServerSocket server=new ServerSocket(serverPort);server = new ServerSocket(serverPort);System.out.println("正在监听3400端口");} catch (IOException e) {e.printStackTrace();}}public void run() {Socket socket = null;ObjectInputStream in;while (true) {try {synchronized (server) {socket = server.accept();}System.out.println("当前的连接是:"+ socket.getInetAddress().toString());socket.setSoTimeout(20000);in = new ObjectInputStream(socket.getInputStream());ObjectSeri data = (ObjectSeri) in.readObject();System.out.println("The name is:" + data.getName()+ "and age is:" + data.getAge());in.close();in = null;socket.close();} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}} public static void main(String args[]) {  (new serverTest()).start(); }}
3.最后,建立一个客户端来测试下

import java.io.ObjectOutputStream;import java.net.InetSocketAddress;import java.net.Socket;//建立一个client测试类public class TestClient {private String address = "127.0.0.1";private int port = 3400;public TestClient() {// Prepare the data need to transmitObjectSeri data = new ObjectSeri();data.setName("Scott");data.setAge("34");Socket client = new Socket();InetSocketAddress adr = new InetSocketAddress(this.address, this.port);try {client.connect(adr, 10000);ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());// send objectout.writeObject(data);out.flush();out.close();out = null;data = null;client.close();client = null;} catch (java.io.IOException e) {System.out.println("IOException :" + e.toString());}}public static void main(String[] args) {new TestClient();}}

输出结果如下:

正在监听3400端口
当前的连接是:/127.0.0.1
The name is:Scottand age is:34


0 0