欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Socket實(shí)現(xiàn)的傳輸對(duì)象功能示例

 更新時(shí)間:2017年06月22日 08:48:06   作者:kongxx  
這篇文章主要介紹了Java Socket實(shí)現(xiàn)的傳輸對(duì)象功能,結(jié)合具體實(shí)例形式分析了java socket傳輸對(duì)象的原理及接口、客戶端、服務(wù)器端相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了Java Socket實(shí)現(xiàn)的傳輸對(duì)象功能。分享給大家供大家參考,具體如下:

前面兩篇文章介紹了怎樣建立Java Socket通信,這里說(shuō)一下怎樣使用Java Socket來(lái)傳輸對(duì)象。

首先需要一個(gè)普通的對(duì)象類,由于需要序列化這個(gè)對(duì)象以便在網(wǎng)絡(luò)上傳輸,所以實(shí)現(xiàn)java.io.Serializable接口就是必不可少的了,如下:

package com.googlecode.garbagecan.test.socket.sample3;
public class User implements java.io.Serializable {
  private static final long serialVersionUID = 1L;
  private String name;
  private String password;
  public User() {
  }
  public User(String name, String password) {
    this.name = name;
    this.password = password;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
}

對(duì)于Server端的代碼,代碼中分別使用了ObjectInputStream和ObjectOutputStream來(lái)接收和發(fā)送socket中的InputStream和OutputStream,然后轉(zhuǎn)換成Java對(duì)象,如下:

package com.googlecode.garbagecan.test.socket.sample3;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MyServer {
  private final static Logger logger = Logger.getLogger(MyServer.class.getName());
  public static void main(String[] args) throws IOException {
    ServerSocket server = new ServerSocket(10000);
    while (true) {
      Socket socket = server.accept();
      invoke(socket);
    }
  }
  private static void invoke(final Socket socket) throws IOException {
    new Thread(new Runnable() {
      public void run() {
        ObjectInputStream is = null;
        ObjectOutputStream os = null;
        try {
          is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
          os = new ObjectOutputStream(socket.getOutputStream());
          Object obj = is.readObject();
          User user = (User)obj;
          System.out.println("user: " + user.getName() + "/" + user.getPassword());
          user.setName(user.getName() + "_new");
          user.setPassword(user.getPassword() + "_new");
          os.writeObject(user);
          os.flush();
        } catch (IOException ex) {
          logger.log(Level.SEVERE, null, ex);
        } catch(ClassNotFoundException ex) {
          logger.log(Level.SEVERE, null, ex);
        } finally {
          try {
            is.close();
          } catch(Exception ex) {}
          try {
            os.close();
          } catch(Exception ex) {}
          try {
            socket.close();
          } catch(Exception ex) {}
        }
      }
    }).start();
  }
}

Client也和Server端類似,同樣使用ObjectOutputStream和ObjectInputStream來(lái)處理,如下:

package com.googlecode.garbagecan.test.socket.sample3;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MyClient {
  private final static Logger logger = Logger.getLogger(MyClient.class.getName());
  public static void main(String[] args) throws Exception {
    for (int i = 0; i < 100; i++) {
      Socket socket = null;
      ObjectOutputStream os = null;
      ObjectInputStream is = null;
      try {
        socket = new Socket("localhost", 10000);
        os = new ObjectOutputStream(socket.getOutputStream());
        User user = new User("user_" + i, "password_" + i);
        os.writeObject(user);
        os.flush();
        is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
        Object obj = is.readObject();
        if (obj != null) {
          user = (User)obj;
          System.out.println("user: " + user.getName() + "/" + user.getPassword());
        }
      } catch(IOException ex) {
        logger.log(Level.SEVERE, null, ex);
      } finally {
        try {
          is.close();
        } catch(Exception ex) {}
        try {
          os.close();
        } catch(Exception ex) {}
        try {
          socket.close();
        } catch(Exception ex) {}
      }
    }
  }
}

最后測(cè)試上面的代碼,首先運(yùn)行Server類,然后運(yùn)行Client類,就可以分別在Server端和Client端控制臺(tái)看到接收到的User對(duì)象實(shí)例了。

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 詳解SpringBoot中異步請(qǐng)求和異步調(diào)用(看完這一篇就夠了)

    詳解SpringBoot中異步請(qǐng)求和異步調(diào)用(看完這一篇就夠了)

    這篇文章主要介紹了SpringBoot中異步請(qǐng)求和異步調(diào)用問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • JVM 體系結(jié)構(gòu)詳解

    JVM 體系結(jié)構(gòu)詳解

    本文主要介紹了JVM體系結(jié)構(gòu)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • 解決Springboot2.1.x配置Activiti7單獨(dú)數(shù)據(jù)源問(wèn)題

    解決Springboot2.1.x配置Activiti7單獨(dú)數(shù)據(jù)源問(wèn)題

    這篇文章主要介紹了Springboot2.1.x配置Activiti7單獨(dú)數(shù)據(jù)源問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java concurrency集合之ConcurrentHashMap_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency集合之ConcurrentHashMap_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java concurrency集合之ConcurrentHashMap的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • java網(wǎng)絡(luò)之基于UDP的聊天程序示例解析

    java網(wǎng)絡(luò)之基于UDP的聊天程序示例解析

    這篇文章主要介紹了java網(wǎng)絡(luò)之基于UDP的聊天程序示例解析,文中通過(guò)步驟及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java?Autowired注解深入分析

    Java?Autowired注解深入分析

    @Autowired注解是Spring中非常重要且常見(jiàn)的,接下來(lái)就簡(jiǎn)要的介紹一下它的用法。@Autowired默認(rèn)是通過(guò)set方法,按照類型自動(dòng)裝配JavaBean,set方法可省略不寫(xiě),它主要是修飾在成員變量上
    2023-01-01
  • Java中的封裝性(包含this關(guān)鍵字,構(gòu)造器等)

    Java中的封裝性(包含this關(guān)鍵字,構(gòu)造器等)

    這篇文章主要介紹了Java中的封裝性(包含this關(guān)鍵字,構(gòu)造器等)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java 手寫(xiě)LRU緩存淘汰算法

    Java 手寫(xiě)LRU緩存淘汰算法

    本文主要講了如何通過(guò)哈希鏈表這種數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)LRU算法,提供了三種實(shí)現(xiàn)思路,第一種從雙向鏈表開(kāi)始,借助于HashMap來(lái)實(shí)現(xiàn)滿足要求的LRUCache
    2021-05-05
  • javaGUI實(shí)現(xiàn)多人聊天功能

    javaGUI實(shí)現(xiàn)多人聊天功能

    這篇文章主要為大家詳細(xì)介紹了javaGUI實(shí)現(xiàn)多人聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java IO之File 類詳解

    Java IO之File 類詳解

    這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01

最新評(píng)論