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

来源:互联网 发布:淘宝追加评价期限 编辑:程序博客网 时间:2024/05/16 10:16

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

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

什么情况下需要序列化 

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

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

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

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

[java] view plain copy
 print?
  1. //建立用来持续化的对象  
  2. import java.io.Serializable;  
  3. public class ObjectSeri implements Serializable{  
  4.       
  5.     //成员变量写成static的话是不能被持久化的  
  6.     //private关键字是不能被持久化的,脱离了JVM,成员变量是不在JVM的安全机制之内  
  7.     private String name;  
  8.     private String age;  
  9.     public String getName() {  
  10.         return name;  
  11.     }  
  12.     public String getAge() {  
  13.         return age;  
  14.     }  
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18.     public void setAge(String age) {  
  19.         this.age = age;  
  20.     }  
  21.   
  22. }  
2.有了传输的对象,下一步就是建立一个服务端线程来监听socket端口,并且在run方法里面实现读取对象的数据

[java] view plain copy
 print?
  1. import java.io.IOException;  
  2. import java.io.ObjectInputStream;  
  3. import java.net.ServerSocket;  
  4. import java.net.Socket;  
  5.   
  6. //serverTest类继承thread类,监听端口来的信息  
  7. public class serverTest extends Thread {  
  8. //  private final String serverIP = "127.0.0.1";  
  9.     private final int serverPort = 3400;  
  10.     private ServerSocket server;  
  11.     public serverTest() {  
  12.         try {  
  13.             // ServerSocket server=new ServerSocket(serverPort);  
  14.             server = new ServerSocket(serverPort);  
  15.             System.out.println("正在监听3400端口");  
  16.         } catch (IOException e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.     }  
  20.     public void run() {  
  21.         Socket socket = null;  
  22.         ObjectInputStream in;  
  23.         while (true) {  
  24.             try {  
  25.                 synchronized (server) {  
  26.                     socket = server.accept();  
  27.                 }  
  28.                 System.out.println("当前的连接是:"  
  29.                         + socket.getInetAddress().toString());  
  30.                 socket.setSoTimeout(20000);  
  31.                 in = new ObjectInputStream(socket.getInputStream());  
  32.                 ObjectSeri data = (ObjectSeri) in.readObject();  
  33.                 System.out.println("The name is:" + data.getName()  
  34.                         + "and age is:" + data.getAge());  
  35.                 in.close();  
  36.                 in = null;  
  37.                 socket.close();  
  38.             } catch (IOException | ClassNotFoundException e) {  
  39.                 e.printStackTrace();  
  40.             }  
  41.         }  
  42.     }  
  43.       
  44.      public static void main(String args[]) {  
  45.           (new serverTest()).start();  
  46.          }  
  47.   
  48. }  
3.最后,建立一个客户端来测试下

[java] view plain copy
 print?
  1. import java.io.ObjectOutputStream;  
  2. import java.net.InetSocketAddress;  
  3. import java.net.Socket;  
  4.   
  5. //建立一个client测试类  
  6. public class TestClient {  
  7.     private String address = "127.0.0.1";  
  8.     private int port = 3400;  
  9.   
  10.     public TestClient() {  
  11.         // Prepare the data need to transmit  
  12.         ObjectSeri data = new ObjectSeri();  
  13.         data.setName("Scott");  
  14.         data.setAge("34");  
  15.         Socket client = new Socket();  
  16.         InetSocketAddress adr = new InetSocketAddress(this.address, this.port);  
  17.         try {  
  18.             client.connect(adr, 10000);  
  19.             ObjectOutputStream out = new ObjectOutputStream(  
  20.                     client.getOutputStream());  
  21.             // send object  
  22.             out.writeObject(data);  
  23.             out.flush();  
  24.             out.close();  
  25.             out = null;  
  26.             data = null;  
  27.             client.close();  
  28.             client = null;  
  29.         } catch (java.io.IOException e) {  
  30.   
  31.             System.out.println("IOException :" + e.toString());  
  32.         }  
  33.     }  
  34.   
  35.     public static void main(String[] args) {  
  36.         new TestClient();  
  37.   
  38.     }  
  39.   
  40. }  

输出结果如下:

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



http://blog.csdn.net/kingmicrosoft/article/details/38942843



原创粉丝点击