在Java Socket使用TCP的基础上,通过ObjectInputStream和ObjectOutputStream来读写对象。

//传输的对象,需要序列化

package socket;

import java.io.Serializable;

public class MsgTO implements Serializable

{

private static final long serialVersionUID = 1L;

private String msg;

private int status;

private String response;

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

public int getStatus() {

return status;

}

public void setStatus(int status) {

this.status = status;

}

public String getResponse() {

return response;

}

public void setResponse(String response) {

this.response = response;

}

}

//客户端

public class SocketClient

{

private final Logger logger = LoggerFactory.getLogger(getClass());

public static void main(String args[]) throws Exception

{

Socket socket = new Socket("192.168.100.236", 2221);

System.out.println("socket created");

//send request

OutputStream os = socket.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(os);

System.out.println("send hello");

MsgTO obj = new MsgTO();

obj.setMsg("Hello");

oos.writeObject(obj);;

oos.flush();

socket.shutdownOutput();

//receive response

InputStream is = socket.getInputStream();

ObjectInputStream ois = new ObjectInputStream(is);

obj = (MsgTO) ois.readObject();

System.out.println("Received:"+obj);

if(obj != null)

{

System.out.println("status="+obj.getStatus());

System.out.println("response="+obj.getResponse());

}

socket.shutdownInput();

//close resource

oos.close();

os.close();

socket.close();

}

}

//服务端

public class SocketServer

{

public static void main(String args[]) throws Exception

{

ServerSocket serverSocket = new ServerSocket(2221);

System.out.println("server socket created");

//for multiple clients

while (true) //循环监听,等待客户端的连接

{

System.out.println("***");

Socket socket = serverSocket.accept();

ServerHandler serverHandler = new ServerHandler(socket);

serverHandler.setPriority(4);//设置线程的优先级来保证运行速度, 范围为[1,10], 默认为5.

serverHandler.start();

}

}

}

class ServerHandler extends Thread

{

private final Logger logger = LoggerFactory.getLogger(getClass());

//与本线程相关的Socket

private Socket socket = null;

public ServerHandler(Socket socket)

{

this.socket = socket;

}

//线程执行的操作

//for object

public void run()

{

InputStream is = null;

ObjectInputStream ois = null;

OutputStream os = null;

ObjectOutputStream oos = null;

try

{

//receives request

is = socket.getInputStream();

ois = new ObjectInputStream(is);

MsgTO obj = (MsgTO) ois.readObject();

logger.debug("received:" + obj);

if(obj!=null)

{

logger.debug("status=" + obj.getStatus());

logger.debug("msg=" + obj.getMsg());

}

socket.shutdownInput();

//deal is still to do

//send response

os = socket.getOutputStream();

oos = new ObjectOutputStream(os);

logger.debug("send response");

if(obj != null)

{

obj.setStatus(0);

obj.setResponse("123");

oos.writeObject(obj);

}

oos.flush();

socket.shutdownOutput();

} catch (Exception ex)

{

logger.error(ex.getMessage());

ex.printStackTrace(System.out);

} finally

{

try //close resource

{

oos.close();

ois.close();

is.close();

socket.close();

} catch (Exception ex)

{

ex.printStackTrace(System.out);

}

}

}

}

java 对象流传输socket_Java Socket(二)使用TCP传输对象相关推荐

  1. java 网络编程(二) tcp传输实现客户端和服务端进行信息交流

    1.使用Tcp从一台电脑往另一台电脑上发送文本数据 客户端: import java.io.*; import java.net.*; /**** 客户端,* 通过查阅socket对象,发现在该对象建 ...

  2. flink的java api_Flink 流处理API之二

    1.Transform 1.1 map val streamMap = stream.map { x => x * 2 } 1.2 flatmap flatMap的函数签名:def flatMa ...

  3. java流与文件——对象流和序列化

    [0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--对象流和序列化 的相关知识: 0.2) for source code , pleas ...

  4. Java-IO流(File操作,字符输入输出流,字节输入输出流,缓冲流,对象流)

    File对象 File的介绍 File 类 就是当前系统中 文件或者文件夹的抽象表示      通俗的讲  就是 使用File对象 来操作我们电脑系统中的文件或者文件夹 学习File类 其实就是学习 ...

  5. Java面试题集-JVM(二)

    Java面试题集-JVM(二) 1.对象的内存布局? 对象在堆内存的存储布局可分为对象头.实例数据和对⻬填充. 对象头占 12B,包括对象标记和类型指针.对象标记存储对象⾃身的运⾏时数据,如哈希码.G ...

  6. EAUML日拱一卒-活动图:: 对象流

    如果你足够细心,应该可以注意到上一篇文章最后的示例流程中,有一个地方与众不同,就是下图中红框中的部分. 这部分就是今天的内容,对象流. 语义 控制流(control flow)描述了两个活动节点之间执 ...

  7. 【Java 网络编程】TCP 传输机制 ( 数据拆分 | 排序 | 顺序发送 | 顺序组装 | 超时重发 )

    文章目录 I TCP 传输过程 II TCP 传输示例 III TCP 传输特殊情况处理 I TCP 传输过程 1. TCP 传输过程 : 排序 , 顺序发送 , 顺序组装 ; ① 排序 : TCP ...

  8. MMO+Java:一、Java服务器相关基础知识:3、TCP的核心意涵与基本原理

    TCP的含义与基本原理(重温TCP) 一.TCP的含义(面试必考,需深入理解) 面向连接的,可靠的传输协议. 二.TCP的连接管理全过程 客户端与服务端,服务端等待客户端的连接,客户端去主动连接服务端 ...

  9. 【计算机网络】python——socket编程(TCP/UDP)

    前言 以前做了实验都是直接分享实验报告.反思了一下,实验报告又臭又长,最多只有同做这个实验的朋友会耐着性子看一看.为了提供更有效的知识分享,能为更多的朋友提供一些参考,以后的文章我都会尽量主题鲜明,简 ...

最新文章

  1. ceph rados命令使用
  2. SQL Relay开源的数据库池连接代理服务器
  3. LSI IOC,ROC,HBA,Raid Adapter
  4. EasyUi 改变 selelct 的 下拉内容 div 的高度
  5. 初学Java ssh之Spring 第三篇
  6. 720不能建立远程计算机连接,有高手知道错误720:不能建立到远程计算机的连接这个问题怎么解决? 爱问知识人...
  7. [HAOI 2018]染色
  8. WSS 数据库表中的 UserInfo 表中的 tp_SystemId 字段的使用
  9. 线性规划 - 用单纯形法解决LP问题 - (Matlab、Lingo建模)
  10. 阴阳师师徒系统不同服务器,阴阳师体服师徒系统未收录改为随机SSR
  11. 计算机系统中处理的图片可分为,第五章图像处理.doc
  12. 能改变原生web前端元素样式的water.css
  13. shell编写yum安装监控zabbix脚本
  14. java多线程join()方法原理详解
  15. SaaS是什么?是订阅吗?还是web应用?
  16. 阿里云服务器部署(2)---配置EMQX服务器(企业版)
  17. ZOC7 for Mac(终端仿真器)
  18. C语言简易程序设计————6、用*号输出字母C的图案
  19. 转:各类职位的简写及中英对照
  20. 计算机组成内存外存,内存和外存

热门文章

  1. DotNet程序员是不是最不幸福?
  2. 利用类定义一个指针会调用默认构造函数吗_C++的拷贝构造函数
  3. 使用 redmind 进行项目任务管理
  4. dubbo服务的运行方式
  5. 曼彻斯特编码_两种编码方式以及两种帧结构
  6. learnpythonthehardway下载_Python【十一】:阶段小结
  7. cpu散热器怎么拆_电脑CPU处理器与整机温度高 教你简单解决
  8. 算法导论 算法_算法导论
  9. 一? ilkkn.n_IL&FS的完整形式是什么?
  10. ruby 集合 分组_在Ruby中找到两个集合之间的区别