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》这个比较重要,搞了我半天不知道哪里出错,言来是这个。
服务器端和客户端两边的实体类要一模一样,类名一样,包名也要一样。我就是因为包名不一样搞了很久。。。。

相关文章

  • 详解java 中泛型中的类型擦除和桥方法

    详解java 中泛型中的类型擦除和桥方法

    这篇文章主要介绍了详解java 中泛型中的类型擦除和桥方法的相关资料,需要的朋友可以参考下
    2017-06-06
  • 使用maven-assembly-plugin如何打包多模块项目

    使用maven-assembly-plugin如何打包多模块项目

    这篇文章主要介绍了使用maven-assembly-plugin如何打包多模块项目,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java实现简单推箱子游戏

    Java实现简单推箱子游戏

    这篇文章主要为大家详细介绍了Java实现推箱子游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • mybatis初始化SqlSessionFactory失败的几个原因分析

    mybatis初始化SqlSessionFactory失败的几个原因分析

    这篇文章主要介绍了mybatis初始化SqlSessionFactory失败的几个原因分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java实现矩形碰撞检测

    Java实现矩形碰撞检测

    这篇文章主要为大家详细介绍了Java实现矩形碰撞检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Java CompletableFuture如何实现超时功能

    Java CompletableFuture如何实现超时功能

    这篇文章主要为大家介绍了实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的小伙伴可以了解下
    2025-01-01
  • Java与Oracle实现事务(JDBC事务)实例详解

    Java与Oracle实现事务(JDBC事务)实例详解

    这篇文章主要介绍了Java与Oracle实现事务(JDBC事务)实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • 值得Java程序猿阅读的书籍

    值得Java程序猿阅读的书籍

    这篇文章主要推荐了一些值得Java程序猿阅读的书籍,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Spring Boot中的 6 种API请求参数读取方式示例详解

    Spring Boot中的 6 种API请求参数读取方式示例详解

    使用Spring Boot开发API的时候,读取请求参数是服务端编码中最基本的一项操作,Spring Boot中也提供了多种机制来满足不同的API设计要求,这篇文章主要介绍了Spring Boot中的 6 种API请求参数读取方式示例详解,需要的朋友可以参考下
    2024-05-05
  • Java 数据流之Broadcast State

    Java 数据流之Broadcast State

    这篇文章主要介绍了Java 数据流之Broadcast State,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论