Java Socket实战之三:传输对象
生活随笔
收集整理的這篇文章主要介紹了
Java Socket实战之三:传输对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自:https://i.cnblogs.com/EditPosts.aspx?opt=1
前面兩篇文章介紹了怎樣建立Java Socket通信,這一篇說一下怎樣使用Java Socket來傳輸對象。
首先需要一個普通的對象類,由于需要序列化這個對象以便在網絡上傳輸,所以實現java.io.Serializable接口就是必不可少的了,如下:
1 package com.googlecode.garbagecan.test.socket.sample3; 2 3 public class User implements java.io.Serializable { 4 private static final long serialVersionUID = 1L; 5 private String name; 6 private String password; 7 8 public User() { 9 10 } 11 12 public User(String name, String password) { 13 this.name = name; 14 this.password = password; 15 } 16 17 public String getName() { 18 return name; 19 } 20 21 public void setName(String name) { 22 this.name = name; 23 } 24 25 public String getPassword() { 26 return password; 27 } 28 29 public void setPassword(String password) { 30 this.password = password; 31 } 32 }對于Server端的代碼,代碼中分別使用了ObjectInputStream和ObjectOutputStream來接收和發送socket中的InputStream和OutputStream,然后轉換成Java對象,如下:
1 package com.googlecode.garbagecan.test.socket.sample3; 2 3 import java.io.*; 4 import java.net.ServerSocket; 5 import java.net.Socket; 6 import java.util.logging.Level; 7 import java.util.logging.Logger; 8 9 public class MyServer { 10 11 private final static Logger logger = Logger.getLogger(MyServer.class.getName()); 12 13 public static void main(String[] args) throws IOException { 14 ServerSocket server = new ServerSocket(10000); 15 16 while (true) { 17 Socket socket = server.accept(); 18 invoke(socket); 19 } 20 } 21 22 private static void invoke(final Socket socket) throws IOException { 23 new Thread(new Runnable() { 24 public void run() { 25 ObjectInputStream is = null; 26 ObjectOutputStream os = null; 27 try { 28 is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream())); 29 os = new ObjectOutputStream(socket.getOutputStream()); 30 31 Object obj = is.readObject(); 32 User user = (User)obj; 33 System.out.println("user: " + user.getName() + "/" + user.getPassword()); 34 35 user.setName(user.getName() + "_new"); 36 user.setPassword(user.getPassword() + "_new"); 37 38 os.writeObject(user); 39 os.flush(); 40 } catch (IOException ex) { 41 logger.log(Level.SEVERE, null, ex); 42 } catch(ClassNotFoundException ex) { 43 logger.log(Level.SEVERE, null, ex); 44 } finally { 45 try { 46 is.close(); 47 } catch(Exception ex) {} 48 try { 49 os.close(); 50 } catch(Exception ex) {} 51 try { 52 socket.close(); 53 } catch(Exception ex) {} 54 } 55 } 56 }).start(); 57 } 58 }Client也和Server端類似,同樣使用ObjectOutputStream和ObjectInputStream來處理,如下:
1 package com.googlecode.garbagecan.test.socket.sample3; 2 3 import java.io.BufferedInputStream; 4 import java.io.IOException; 5 import java.io.ObjectInputStream; 6 import java.io.ObjectOutputStream; 7 import java.net.Socket; 8 import java.util.logging.Level; 9 import java.util.logging.Logger; 10 11 public class MyClient { 12 13 private final static Logger logger = Logger.getLogger(MyClient.class.getName()); 14 15 public static void main(String[] args) throws Exception { 16 for (int i = 0; i < 100; i++) { 17 Socket socket = null; 18 ObjectOutputStream os = null; 19 ObjectInputStream is = null; 20 21 try { 22 socket = new Socket("localhost", 10000); 23 24 os = new ObjectOutputStream(socket.getOutputStream()); 25 User user = new User("user_" + i, "password_" + i); 26 os.writeObject(user); 27 os.flush(); 28 29 is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream())); 30 Object obj = is.readObject(); 31 if (obj != null) { 32 user = (User)obj; 33 System.out.println("user: " + user.getName() + "/" + user.getPassword()); 34 } 35 } catch(IOException ex) { 36 logger.log(Level.SEVERE, null, ex); 37 } finally { 38 try { 39 is.close(); 40 } catch(Exception ex) {} 41 try { 42 os.close(); 43 } catch(Exception ex) {} 44 try { 45 socket.close(); 46 } catch(Exception ex) {} 47 } 48 } 49 } 50 }最后測試上面的代碼,首先運行Server類,然后運行Client類,就可以分別在Server端和Client端控制臺看到接收到的User對象實例了。
?
轉載于:https://www.cnblogs.com/sharpest/p/10055463.html
總結
以上是生活随笔為你收集整理的Java Socket实战之三:传输对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 容器日志采集利器Log-Pilot
- 下一篇: Linux环境搭建 | 手把手教你配置L