首页 > 开发 > Java > 正文

Java Socket实现的传输对象功能示例

2024-07-13 10:09:12
字体:
来源:转载
供稿:网友

本文实例讲述了Java Socket实现的传输对象功能。分享给大家供大家参考,具体如下:

前面两篇文章介绍了怎样建立Java Socket通信,这里说一下怎样使用Java Socket来传输对象。

首先需要一个普通的对象类,由于需要序列化这个对象以便在网络上传输,所以实现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;  }}

对于Server端的代码,代码中分别使用了ObjectInputStream和ObjectOutputStream来接收和发送socket中的InputStream和OutputStream,然后转换成Java对象,如下:

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来处理,如下:

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) {}      }    }  }}

最后测试上面的代码,首先运行Server类,然后运行Client类,就可以分别在Server端和Client端控制台看到接收到的User对象实例了。

 

希望本文所述对大家java程序设计有所帮助。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表