java 对象流传输socket_Java Socket(二)使用TCP传输对象
在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传输对象相关推荐
- java 网络编程(二) tcp传输实现客户端和服务端进行信息交流
1.使用Tcp从一台电脑往另一台电脑上发送文本数据 客户端: import java.io.*; import java.net.*; /**** 客户端,* 通过查阅socket对象,发现在该对象建 ...
- flink的java api_Flink 流处理API之二
1.Transform 1.1 map val streamMap = stream.map { x => x * 2 } 1.2 flatmap flatMap的函数签名:def flatMa ...
- java流与文件——对象流和序列化
[0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--对象流和序列化 的相关知识: 0.2) for source code , pleas ...
- Java-IO流(File操作,字符输入输出流,字节输入输出流,缓冲流,对象流)
File对象 File的介绍 File 类 就是当前系统中 文件或者文件夹的抽象表示 通俗的讲 就是 使用File对象 来操作我们电脑系统中的文件或者文件夹 学习File类 其实就是学习 ...
- Java面试题集-JVM(二)
Java面试题集-JVM(二) 1.对象的内存布局? 对象在堆内存的存储布局可分为对象头.实例数据和对⻬填充. 对象头占 12B,包括对象标记和类型指针.对象标记存储对象⾃身的运⾏时数据,如哈希码.G ...
- EAUML日拱一卒-活动图:: 对象流
如果你足够细心,应该可以注意到上一篇文章最后的示例流程中,有一个地方与众不同,就是下图中红框中的部分. 这部分就是今天的内容,对象流. 语义 控制流(control flow)描述了两个活动节点之间执 ...
- 【Java 网络编程】TCP 传输机制 ( 数据拆分 | 排序 | 顺序发送 | 顺序组装 | 超时重发 )
文章目录 I TCP 传输过程 II TCP 传输示例 III TCP 传输特殊情况处理 I TCP 传输过程 1. TCP 传输过程 : 排序 , 顺序发送 , 顺序组装 ; ① 排序 : TCP ...
- MMO+Java:一、Java服务器相关基础知识:3、TCP的核心意涵与基本原理
TCP的含义与基本原理(重温TCP) 一.TCP的含义(面试必考,需深入理解) 面向连接的,可靠的传输协议. 二.TCP的连接管理全过程 客户端与服务端,服务端等待客户端的连接,客户端去主动连接服务端 ...
- 【计算机网络】python——socket编程(TCP/UDP)
前言 以前做了实验都是直接分享实验报告.反思了一下,实验报告又臭又长,最多只有同做这个实验的朋友会耐着性子看一看.为了提供更有效的知识分享,能为更多的朋友提供一些参考,以后的文章我都会尽量主题鲜明,简 ...
最新文章
- ceph rados命令使用
- SQL Relay开源的数据库池连接代理服务器
- LSI IOC,ROC,HBA,Raid Adapter
- EasyUi 改变 selelct 的 下拉内容 div 的高度
- 初学Java ssh之Spring 第三篇
- 720不能建立远程计算机连接,有高手知道错误720:不能建立到远程计算机的连接这个问题怎么解决? 爱问知识人...
- [HAOI 2018]染色
- WSS 数据库表中的 UserInfo 表中的 tp_SystemId 字段的使用
- 线性规划 - 用单纯形法解决LP问题 - (Matlab、Lingo建模)
- 阴阳师师徒系统不同服务器,阴阳师体服师徒系统未收录改为随机SSR
- 计算机系统中处理的图片可分为,第五章图像处理.doc
- 能改变原生web前端元素样式的water.css
- shell编写yum安装监控zabbix脚本
- java多线程join()方法原理详解
- SaaS是什么?是订阅吗?还是web应用?
- 阿里云服务器部署(2)---配置EMQX服务器(企业版)
- ZOC7 for Mac(终端仿真器)
- C语言简易程序设计————6、用*号输出字母C的图案
- 转:各类职位的简写及中英对照
- 计算机组成内存外存,内存和外存
热门文章
- DotNet程序员是不是最不幸福?
- 利用类定义一个指针会调用默认构造函数吗_C++的拷贝构造函数
- 使用 redmind 进行项目任务管理
- dubbo服务的运行方式
- 曼彻斯特编码_两种编码方式以及两种帧结构
- learnpythonthehardway下载_Python【十一】:阶段小结
- cpu散热器怎么拆_电脑CPU处理器与整机温度高 教你简单解决
- 算法导论 算法_算法导论
- 一? ilkkn.n_IL&FS的完整形式是什么?
- ruby 集合 分组_在Ruby中找到两个集合之间的区别