[置頂] Java Socket實戰之三 傳輸對象

來源:互聯網
上載者:User

本文地址:http://blog.csdn.net/kongxx/article/details/7259827

Java Socket實戰之一 單線程通訊

Java Socket實戰之二 多線程通訊

前面兩篇文章介紹了怎樣建立Java Socket通訊,這一篇說一下怎樣使用Java Socket來傳輸對象。

首先需要一個普通的對象類,由於需要序列化這個對象以便在網路上傳輸,所以實現java.io.Serializable介面就是必不可少的了,入下:

package com.googlecode.garbagecan.test.socket.sample3;</p><p>public class User implements java.io.Serializable {<br />private static final long serialVersionUID = 1L;<br />private String name;<br />private String password;</p><p>public User() {</p><p>}</p><p>public User(String name, String password) {<br />this.name = name;<br />this.password = password;<br />}</p><p>public String getName() {<br />return name;<br />}</p><p>public void setName(String name) {<br />this.name = name;<br />}</p><p>public String getPassword() {<br />return password;<br />}</p><p>public void setPassword(String password) {<br />this.password = password;<br />}<br />}對於Server端的代碼,代碼中分別使用了ObjectInputStream和ObjectOutputStream來接收和發送socket中的InputStream和OutputStream,然後轉換成Java對象,如下:

package com.googlecode.garbagecan.test.socket.sample3;</p><p>import java.io.*;<br />import java.net.ServerSocket;<br />import java.net.Socket;<br />import java.util.logging.Level;<br />import java.util.logging.Logger;</p><p>public class MyServer {</p><p>private final static Logger logger = Logger.getLogger(MyServer.class.getName());</p><p>public static void main(String[] args) throws IOException {<br />ServerSocket server = new ServerSocket(10000);</p><p>while (true) {<br />Socket socket = server.accept();<br />invoke(socket);<br />}<br />}</p><p>private static void invoke(final Socket socket) throws IOException {<br />new Thread(new Runnable() {<br />public void run() {<br />ObjectInputStream is = null;<br />ObjectOutputStream os = null;<br />try {<br />is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));<br />os = new ObjectOutputStream(socket.getOutputStream());</p><p>Object obj = is.readObject();<br />User user = (User)obj;<br />System.out.println("user: " + user.getName() + "/" + user.getPassword());</p><p>user.setName(user.getName() + "_new");<br />user.setPassword(user.getPassword() + "_new");</p><p>os.writeObject(user);<br />os.flush();<br />} catch (IOException ex) {<br />logger.log(Level.SEVERE, null, ex);<br />} catch(ClassNotFoundException ex) {<br />logger.log(Level.SEVERE, null, ex);<br />} finally {<br />try {<br />is.close();<br />} catch(Exception ex) {}<br />try {<br />os.close();<br />} catch(Exception ex) {}<br />try {<br />socket.close();<br />} catch(Exception ex) {}<br />}<br />}<br />}).start();<br />}<br />}Client也和Server端類似,同樣使用ObjectOutputStream和ObjectInputStream來處理,如下:
package com.googlecode.garbagecan.test.socket.sample3;</p><p>import java.io.BufferedInputStream;<br />import java.io.IOException;<br />import java.io.ObjectInputStream;<br />import java.io.ObjectOutputStream;<br />import java.net.Socket;<br />import java.util.logging.Level;<br />import java.util.logging.Logger;</p><p>public class MyClient {</p><p>private final static Logger logger = Logger.getLogger(MyClient.class.getName());</p><p>public static void main(String[] args) throws Exception {<br />for (int i = 0; i < 100; i++) {<br />Socket socket = null;<br />ObjectOutputStream os = null;<br />ObjectInputStream is = null;</p><p>try {<br />socket = new Socket("localhost", 10000);</p><p>os = new ObjectOutputStream(socket.getOutputStream());<br />User user = new User("user_" + i, "password_" + i);<br />os.writeObject(user);<br />os.flush();</p><p>is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));<br />Object obj = is.readObject();<br />if (obj != null) {<br />user = (User)obj;<br />System.out.println("user: " + user.getName() + "/" + user.getPassword());<br />}<br />} catch(IOException ex) {<br />logger.log(Level.SEVERE, null, ex);<br />} finally {<br />try {<br />is.close();<br />} catch(Exception ex) {}<br />try {<br />os.close();<br />} catch(Exception ex) {}<br />try {<br />socket.close();<br />} catch(Exception ex) {}<br />}<br />}<br />}<br />}最後測試上面的代碼,首先運行Server類,然後運行Client類,就可以分別在Server端和Client端控制台看到接收到的User對象執行個體了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.