源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Java中使用Socket发送Java对象实例

  • 时间:2022-06-22 09:09 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Java中使用Socket发送Java对象实例
以前写聊天程序都是用字符串加个标志就直接发送到服务器,然后转发了。 现在要求我用对象流直接发送对象,测试了一下,记录一下。 其实我更倾向用json发送对象的,json说白了也是字符串,等有空了好好研究研究。 主要功能:客户端给服务器发送个对象,服务器接收到了打印出来。反过来是差不多了,就不写了。 [img]http://files.jb51.net/file_images/article/201505/201552093742301.png?201542093755[/img] 上面是整体架构。 User类就两个属性。
[u]复制代码[/u] 代码如下:
package com.qiantu.bean; import java.io.Serializable; public class User implements Serializable {  private static final long serialVersionUID = 1L;  private String name;  private String 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;  } }
服务器端:接收客户端发送过来的user对象:
[u]复制代码[/u] 代码如下:
package test; import java.io.BufferedInputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.net.ServerSocket; import java.net.Socket; import com.qiantu.bean.User; public class TestServer {  public void start() {   try {    ServerSocket ss = new ServerSocket(7777);    System.out.println("start to accept...");    Socket socket = ss.accept();        //建立输入流    ObjectInputStream ois = new ObjectInputStream(               new BufferedInputStream(socket.getInputStream()));              Object obj = ois.readObject();              if (obj != null) {                  User user = (User)obj;//把接收到的对象转化为user                 System.out.println("user: " + user.getName());                  System.out.println("password: " + user.getPassword());             }              ois.close();             socket.close();             ss.close();   } catch (IOException e) {    e.printStackTrace();   } catch (ClassNotFoundException e) {    e.printStackTrace();   }  }    public static void main(String[] args) {   new TestServer().start();  } }
客户端:给服务器端发送user对象:
[u]复制代码[/u] 代码如下:
package client; import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; import com.qiantu.bean.User; public class TestClient {  public static void main(String[] args) {   new TestClient().start();  }  public void start() {   try {    Socket socket = new Socket("127.0.0.1", 7777);    //建立输入流    ObjectOutputStream oos = new ObjectOutputStream(socket      .getOutputStream());    User user = new User();    user.setName("梁国俏");    user.setPassword("123456");    //输入对象, 一定要flush()    oos.writeObject(user);    oos.flush();        oos.close();    socket.close();   } catch (UnknownHostException e) {    e.printStackTrace();   } catch (IOException e) {    e.printStackTrace();   }  } }
运行结果: [img]http://files.jb51.net/file_images/article/201505/201552093807078.png?201542093816[/img] 要注意的地方: 《1》实体类要实现Serializable类,添加标识serialVersionUID。 《2》发送对象之后要flush(); 《3》这个比较重要,搞了我半天不知道哪里出错,言来是这个。 服务器端和客户端两边的实体类要一模一样,类名一样,包名也要一样。我就是因为包名不一样搞了很久。。。。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部