以前写聊天程序都是用字符串加个标志就直接发送到服务器,然后转发了。

现在要求我用对象流直接发送对象,测试了一下,记录一下。

其实我更倾向用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 socket发送json_Java中使用Socket发送Java对象实例相关推荐

  1. Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(

    2019独角兽企业重金招聘Python工程师标准>>> 在Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(百搜技术) 在Java ME游戏开发中,经常需要进行碰撞检测 ...

  2. 反射创建对象_如何应用Java反射技术灵活地创建程序类的对象实例

    软件项目实训及课程设计指导--如何应用Java反射技术灵活地创建程序类的对象实例 1.如何应用属性配置文件实现对系统中的配置信息进行读写操作 Java中的属性配置文件主要可以作为软件应用系统及项目的配 ...

  3. java中socket类_Java中的Socket的用法

    Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的网络通信时通过Socket实现的,Socket分为Server ...

  4. 【数组,字符串】发送消息中处理 同时发送的表情和文字,一串字符串中 替换 某些 字符 并添加 标签

    发送消息中处理 表情和文字 例如: 12[信封][多云] 00 (展示在输入框的内容) 替换成:<span>12</span><img src="https:/ ...

  5. java if在内存中_全面理解Java内存模型

    Java 内存模型的抽象 在 java 中,所有实例域.静态域和数组元素存储在堆内存中,堆内存在线程之间共享(本文使用"共享变量"这个术语代指实例域,静态域和数组元素).局部变量( ...

  6. java 获取域名_Java获取域名,Java从URL地址中获取域名,Java从Request 获取域名

    Java  获取主域名方法有很多种,有的用截串方式,我用的一个投机取巧的方式,这个获取域名的方法比较简单,代码也较少. Java从URL地址中获取域名//这样获取的方式,不请求就能获取到域名 URL ...

  7. java plsql_在PLSQL中编译复杂的java(转)

    PLSQL中可以编译运行JAVA程序. 一个简单的例子: create or replace and compile java source named xxfnd as package xxfnd; ...

  8. java 普通类获取session_如何在Java的普通类中获取Session以及request对象

    展开全部 你是指你的 web 项目中使用到一个工具性的类,它的e69da5e6ba9062616964757a686964616f31333337613865形参中没有 HttpRequest 或 H ...

  9. immutable java_Java中的mutable和immutable对象实例讲解

    1.mutable(可变)和immutable(不可变)类型的区别 可变类型的对象:提供了可以改变其内部数据值的操作,其内部的值可以被重新更改. 不可变数据类型:其内部的操作不会改变内部的值,一旦试图 ...

  10. JavaScript - 在函数中修改参数值、用对象实例作为参数传递修改参数

    <html><head><head><body><script language="javascript">// 在函数 ...

最新文章

  1. 数据恢复 从binlog文件
  2. 斗鱼实名认证 mysql_斗鱼扩展--DouyuRoom使用说明(十四)
  3. Maven(九)Eclipse创建Web项目(简单方式)
  4. ASP.NET Core MVC+EF Core从开发到部署
  5. 自然语言处理 —— 2.2 使用词嵌入
  6. VTK(二)vs2010第一个VTK程序。
  7. nginx上传目录配置,禁止执行权限
  8. F5和nginx配合转发前端请求
  9. c#2.0语法新关键字 partial
  10. 短视频直播带货APP源码 全开源原生直播APP源码
  11. Java爬虫爬取微博热搜榜
  12. android studio拟器,十二、安装Android Studio 模拟器
  13. 利用vbs脚本实现自动发送微信消息
  14. ROSBridge - ROS系统与非ROS外部系统的通信的C++客户端实现
  15. Automatic Targetless LiDAR-CameraCalibration: A Survey论文解读
  16. Wifi设备接入流程
  17. uni-app 介绍,什么是uni-app,它是干嘛的
  18. tm1688_TM1668驱动LED 子程序
  19. 硬盘保护技术的原理和实践初探
  20. 使用动态ip上网稳定吗?

热门文章

  1. echarts 默认显示图例_Echarts 饼状图显示信息,内容,值,百分比都显示的代码 更改图例等问题汇总...
  2. linux 儒略日时间计算,C/C++ 儒略日计算以及恒星时计算
  3. error: Could not load host key: /etc/ssh/ssh_host_dsa_key
  4. 多指标综合评价方法汇总
  5. 成都盛铭轩:商家怎么装修设计
  6. CVPR2004/风格分解:Separating Style and Content on a Nonlinear Manifold在非线性流形上分离样式和内容
  7. 光纤交换机使用方法及应用方案详解
  8. 2021年5月程序员平均工资14926元!干5天拿了11天工资...
  9. 树莓派之BT下载器实现
  10. png和ico格式互相转换工具