A-A+

Java网络编程:通过TCP协议传输一个对象到服务端[新]

2016年03月15日 计算机 暂无评论 阅读 309 次

昨天写了一个通过ByteArrayOutPutStream类来传输对象数据的方法,但是今天百度了一下才发现自己够傻逼了,因为Socket的getInputStream和getOutputStream返回的就是InputStream和OutputStream的对象,也就是说,可以不通过ByteArrayOutputStream类的实例化对象就可以将Socket的getOutputStream()方法返回的OutputStream实例化对象作为参数传递到ObjectOutputStream中,通过调用其writeObject()方法进行传输对象数据。并在接收端使用ObjcetInputStream类并传入Socket对象方法getIntputStream()返回的InputStream作为参数,然后通过readObject()方法获取传过来的对象。

相关文章:【Java网络编程:通过TCP协议传输一个对象到服务端】

以下为实例代码:

  1. package cn.com.lihuan.oicq;
  2. import java.io.IOException;
  3. import java.io.ObjectInputStream;
  4. import java.io.ObjectOutputStream;
  5. import java.io.Serializable;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. public class SendObject {
  9.     public static void main(String[] args) {
  10.         ServerForObject sfo = new ServerForObject(2541);
  11.         sfo.acceptObject();
  12.         new SocketForObject("127.0.0.1"2541).sendObjcet(new Person("李欢"25));
  13.         System.out.println(sfo.getObj().toString());
  14.     }
  15. }
  16. class Person implements Serializable {
  17.     private static final long serialVersionUID = 1L;
  18.     private String name;
  19.     private int age;
  20.     public Person() {
  21.     }
  22.     public Person(String name, int age) {
  23.         this.name = name;
  24.         this.age = age;
  25.     }
  26.     public String getName() {
  27.         return name;
  28.     }
  29.     public void setName(String name) {
  30.         this.name = name;
  31.     }
  32.     public int getAge() {
  33.         return age;
  34.     }
  35.     public void setAge(int age) {
  36.         this.age = age;
  37.     }
  38.     public String toString() {
  39.         return "Person [name=" + name + ", age=" + age + "]";
  40.     }
  41. }
  42. class SocketForObject {
  43.     private int port;
  44.     private String ipAddress;
  45.     public SocketForObject() {
  46.     }
  47.     public SocketForObject(String ipAddress, int port) {
  48.         this.ipAddress = ipAddress;
  49.         this.port = port;
  50.     }
  51.     public int getPort() {
  52.         return port;
  53.     }
  54.     public void setPort(int port) {
  55.         this.port = port;
  56.     }
  57.     public String getIpAddress() {
  58.         return ipAddress;
  59.     }
  60.     public void setIpAddress(String ipAddress) {
  61.         this.ipAddress = ipAddress;
  62.     }
  63.     public void sendObjcet(Object obj) {
  64.         try {
  65.             Socket s = new Socket(ipAddress, port);
  66.             ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());   //将对象转换成字节码传输
  67.             oos.writeObject(obj);   //开始传输
  68.             oos.close();
  69.             s.close();
  70.         } catch (IOException e) {
  71.             e.printStackTrace();
  72.         }
  73.     }
  74. }
  75. class ServerForObject {
  76.     private int port;
  77.     private Object obj = new Object();
  78.     public ServerForObject(int port) {
  79.         this.port = port;
  80.     }
  81.     public int getPort() {
  82.         return port;
  83.     }
  84.     public void setPort(int port) {
  85.         this.port = port;
  86.     }
  87.     public Object getObj() {
  88.         return obj;
  89.     }
  90.     public void acceptObject() {
  91.         try {
  92.             final ServerSocket ss = new ServerSocket(port);
  93.             new Thread() {
  94.                 public void run() {
  95.                     try {
  96.                         Socket s = ss.accept();
  97.                         ObjectInputStream ois = new ObjectInputStream(s.getInputStream());  //获取接收到的对象字节码
  98.                         obj = ois.readObject(); //将字节码转换为对象
  99.                         ois.close();
  100.                         s.close();
  101.                     } catch (Exception e) {
  102.                         e.printStackTrace();
  103.                     }
  104.                 }
  105.             }.start();
  106.         } catch (IOException e) {
  107.             e.printStackTrace();
  108.         }
  109.     }
  110. }

如果你有发现BUG,请留言反馈。

给我留言



Copyright © Lee's Blog 保留所有权利.   Theme by Ality    粤ICP备17161478号-1

用户登录 ⁄ 注册

分享到: