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

 更新时间:2015年05月20日 09:38:33   投稿:junjie  
这篇文章主要介绍了Java中使用Socket发送Java对象实例,本文使用对象流直接发送对象,本文同时给出代码实例,需要的朋友可以参考下

以前写聊天程序都是用字符串加个标志就直接发送到服务器,然后转发了。
现在要求我用对象流直接发送对象,测试了一下,记录一下。
其实我更倾向用json发送对象的,json说白了也是字符串,等有空了好好研究研究。
主要功能:客户端给服务器发送个对象,服务器接收到了打印出来。反过来是差不多了,就不写了。

上面是整体架构。
User类就两个属性。

复制代码 代码如下:

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对象:

复制代码 代码如下:

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对象:

复制代码 代码如下:

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();
  }
 }
}


运行结果:

要注意的地方:
《1》实体类要实现Serializable类,添加标识serialVersionUID。
《2》发送对象之后要flush();
《3》这个比较重要,搞了我半天不知道哪里出错,言来是这个。
服务器端和客户端两边的实体类要一模一样,类名一样,包名也要一样。我就是因为包名不一样搞了很久。。。。

相关文章

  • springMVC实现图形验证码(kaptcha)代码实例

    springMVC实现图形验证码(kaptcha)代码实例

    这篇文章主要介绍了springMVC实现图形验证码(kaptcha)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
    2019-09-09
  • 基于OpenCv与JVM实现加载保存图像功能(JAVA 图像处理)

    基于OpenCv与JVM实现加载保存图像功能(JAVA 图像处理)

    openCv有一个名imread的简单函数,用于从文件中读取图像,本文给大家介绍JAVA 图像处理基于OpenCv与JVM实现加载保存图像功能,感兴趣的朋友一起看看吧
    2022-01-01
  • Java中SynchronousQueue的底层实现原理剖析

    Java中SynchronousQueue的底层实现原理剖析

    BlockingQueue的实现类中,有一种阻塞队列比较特殊,就是SynchronousQueue(同步移交队列),队列长度为0。本文就来剖析一下SynchronousQueue的底层实现原理,感兴趣的可以了解一下
    2022-11-11
  • java实现文件编码转换的方法

    java实现文件编码转换的方法

    这篇文章主要为大家详细介绍了java实现文件编码转换的方法,分享一个文件编码转换的工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • SpringBoot整合Web开发之文件上传与@ControllerAdvice

    SpringBoot整合Web开发之文件上传与@ControllerAdvice

    @ControllerAdvice注解是Spring3.2中新增的注解,学名是Controller增强器,作用是给Controller控制器添加统一的操作或处理。对于@ControllerAdvice,我们比较熟知的用法是结合@ExceptionHandler用于全局异常的处理,但其作用不止于此
    2022-08-08
  • SpringMVC的REST风格的四种请求方式总结

    SpringMVC的REST风格的四种请求方式总结

    下面小编就为大家带来一篇SpringMVC的REST风格的四种请求方式总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • SpringBoot中WEB的启动流程分析

    SpringBoot中WEB的启动流程分析

    今天我们就来分析下springboot启动web项目整个流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-03-03
  • JavaGUI常用窗体组件与面板使用详解

    JavaGUI常用窗体组件与面板使用详解

    GUI即图形用户界面,它是基于图形的界面,windows就是一个图形用户界面的操作系统,而DOS是基于命令提示符的操作系统,GUI编程就是编出一个图形用户界面的软件,它使用图形的方式,以菜单、按钮、表示、图文框等标准界面元素组成的用户操作界面
    2023-03-03
  • Java获取控制台输入的两种方法小结

    Java获取控制台输入的两种方法小结

    这篇文章主要介绍了Java获取控制台输入的两种方法小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Spring MVC 处理一个请求的流程

    Spring MVC 处理一个请求的流程

    Spring MVC是Spring系列框架中使用频率最高的部分。不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分。因此程序员一定要熟练掌握MVC部分。本篇博客简要分析Spring MVC处理一个请求的流程。
    2021-02-02

最新评论