Java Socket對象資料轉送

來源:互聯網
上載者:User

前面寫了一篇部落格,是Java Socket的學習,下面做了一個Java Socket之間的對象資料轉送。

單線程的對象傳輸入:

package com.zyujie.socket;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class ObjectServer {public static void main(String[] arg) throws Exception {//建立伺服器端的Socket,並監聽連接埠6688ServerSocket socketConnection = new ServerSocket(6688);System.out.println("伺服器已經開啟,等待串連。");//接收用戶端串連,並返回一個socket對象Socket scoket = socketConnection.accept();//對象資料的輸入與輸出,需要用ObjectInputStream和ObjectOutputStream進行ObjectInputStream in = new ObjectInputStream(scoket.getInputStream());ObjectOutputStream out = new ObjectOutputStream(scoket.getOutputStream());//讀取用戶端的對象資料流City city = (City) in.readObject();List cityList = city.getCityList();for (int i = 0; i < cityList.size(); i++) {System.out.println("伺服器端得到城市資料:" + cityList.get(i).toString());}//返回給用戶端的對象City cityBack = new City();List list = new ArrayList();list.add("廣州");list.add("深圳");cityBack.setCityList(list);out.writeObject(cityBack);out.flush();in.close();out.close();}}
package com.zyujie.socket;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.InetAddress;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class ObjectClient {public static void main(String[] arg) throws Exception {//封裝一個對象執行個體City city = new City();List list = new ArrayList();list.add("北京");list.add("上海");list.add("天津");list.add("重慶");city.setCityList(list);//串連到伺服器端Socket socketConnection = new Socket(InetAddress.getLocalHost(), 6688);//使用ObjectOutputStream和ObjectInputStream進行對象資料轉送ObjectOutputStream out = new ObjectOutputStream(socketConnection.getOutputStream());ObjectInputStream in = new ObjectInputStream(socketConnection.getInputStream());//將用戶端的對象資料流輸出到伺服器端去out.writeObject(city);out.flush();//讀取伺服器端返回的對象資料流City cityBack = (City) in.readObject();List backList = cityBack.getCityList();for (int i = 0; i < backList.size(); i++) {System.out.println("用戶端得到返回城市資料:" + backList.get(i).toString());}out.close();in.close();}}

需要一個對象實體類,且要繼承java.io.Serializable,序列化後的對象,才可以通過流的方式傳輸。

package com.zyujie.socket;import java.io.Serializable;import java.util.List;public class City implements Serializable {//實體類,特別注意,作為對象資料流傳輸,需要繼承java.io.Serializable,使用對象進行序列化private List cityList;public List getCityList() {return cityList;}public void setCityList(List cityList) {this.cityList = cityList;}}

多線程,只是在伺服器端啟了線程,可以做CPU的線程池,這裡沒有做。

package com.zyujie.socket;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class ObjectServerApp extends Thread {private Socket client;/* * 建構函式,接收每一個socket執行個體 */public ObjectServerApp(Socket socket) {this.client = socket;}/* * 線程執行方法 */public void run() {try {System.out.println("線程開啟");//對象資料流的擷取與返回ObjectInputStream in = new ObjectInputStream(client.getInputStream());ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());City city = (City) in.readObject();List cityList = city.getCityList();for (int i = 0; i < cityList.size(); i++) {System.out.println("伺服器端得到城市資料:" + cityList.get(i).toString());}List list = new ArrayList();list.add("廣州");list.add("深圳");City cityBack = new City();cityBack.setCityList(list);out.writeObject(cityBack);in.close();out.close();} catch (Exception e) {} finally {}}/* * 啟用線程方法實現多個使用者串連socket伺服器端. */public static void main(String[] args) throws IOException {// 建立服務端,監聽連接埠6688ServerSocket server = new ServerSocket(6688);System.out.println("伺服器已經開啟,等待串連。");// 使用伺服器端保持永久監聽狀態while (true) {// 接收每一個用戶端的串連,並返回socket執行個體ObjectServerApp osa = new ObjectServerApp(server.accept());// 為每一個用戶端啟一個線程,去執行操作osa.start();}}}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.