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

}

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python量化策略源码_[Python源码] 十大经典日内策略之空中花园(附源码分享)

function kzhy(freq)% targetList traderGetTargetList(); %获取目标资产信息 HandleList traderGetHandleList(); %获取账户句柄 global upline; global dnline; if isempty(upline)||isempty(dnline) uplinezeros(length(targetList),1);%记录今天通道的上轨 dnlinezeros(l…

网络多人游戏架构与编程 电子书_Java互联网架构-高性能网络编程必备技能IO与NIO阻塞分析...

欢迎关注头条号:java小马哥周一至周日早九点半!下午三点半!精品技术文章准时送上!!!精品学习资料获取通道,参见文末一、概念NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同…

java 接口文件夹_Java NIO.2 使用Path接口来监听文件、文件夹变化

Java7对NIO进行了大的改进,新增了许多功能:•对文件系统的访问提供了全面的支持•提供了基于异步Channel的IO这些新增的IO功能简称为 NIO.2,依然在java.nio包下。早期的Java只提供了File类来操作文件、文件夹本身,功能有限&#x…

python能制作游戏吗_没有Python不能做的游戏,这些游戏都可以做

简介:Python编程语言的强大,几乎是众所周知的!那么,下面我给大家介绍一下几个用Python实现的各种游戏吧。不仅能用来做web、爬虫、数据分析等,没想到还能用做这么多的游戏,实在令人惊讶不已。注意:以下介绍…

vba excel 退出编辑状态_偷梁换柱之EXCEL编辑保护和VBA隐藏代码保护的解锁

如何解锁EXCEL表格编辑保护和VBA隐藏代码保护?当我们想借用别人的表格发现表格上锁无法编辑又不知道密码时或者当我们用软件生成一些表格时往往会遇到“上锁”问题,导致我们无法对表格进行改动。类似下图这样:那怎么才能征服她呢?…

java使用的页面静态化技术_java秒杀系列(2)- 页面静态化技术

###前言通过代码片段分别介绍服务端渲染、客户端渲染、对象缓存三种方式的写法。代码片段仅供参考,具体实现需要根据业务场景自行适配,但思想都是一样。一、服务端渲染方式####1、接口返回html页面的设置javaAutowiredThymeleafViewResolver thymeleafVi…

activex for chrome扩展程序 下载”_Chrome扩展程序一键生成网页骨架屏

对于依赖接口渲染的页面,在拿到数据之前页面往往是空白的,为了提示用户当前正在加载中,往往会使用进度条、loading图标或骨架屏的方式。对于前两种方案而言,实现比较简单;本文主要研究骨架屏的应用及实现,并…

python定时器 循环_python从写定时器学习Thread

python从写定时器学习Threadpython 如何写一个定时器,循环定时做某一操作呢?Timer 对象from threading import Timerdef hello():print "hello, world"t Timer(10.0, hello)t.start()10秒后输出:hello, world重点研究 t Timer(10…

java创建链表成绩管理系统_成绩管理系统 链表版

1.[代码][C/C]代码/**********************************************************程序描述:学生成绩管理系统*运行环境:Windows 7 SP1 X64*开发环境:CodeBlocks with Win7*作者:耗子、*时间:2015.03******************…

dynamo python修改多个参数_python之函数

a.sort()没有返回值。而sorted(a)是有返回值的。Python的标准比较运算符&#xff1a;<、<、 > 、>、 、 !函数用法和底层分析&#xff1a;函数是一个可重用的程序代码块&#xff0c;函数也代表一个任务和功能&#xff08;function&#xff09;,是代码复用的通用机制…

python开发基础戴歆第四章_第一阶段:Python开发基础 day04 课后练习

第一阶段&#xff1a;Python开发基础 day04 课后作业1.简述python的五大数据类型的作用、定义方式、使用方法数字类型字符串类型列表字典布尔型答&#xff1a;数字类型分为整型(int)和浮点型(float)&#xff1a;整型的作用&#xff1a;表示人的年龄、各种号码、级别等定义方式&…

javascript进制转换_JavaScript 加减危机——为什么会出现这样的结果?

在日常工作计算中&#xff0c;我们如履薄冰&#xff0c;但是 JavaScript 总能给我们这样那样的 surprise~0.1 0.2 &#xff1f;1 - 0.9 &#xff1f;如果小伙伴给出内心的结果&#xff1a;0.1 0.2 0.31 - 0.9 0.1那么小伙伴会被事实狠狠地扇脸&#xff1a;console.log(0.…

python与golang_Golang与python线程详解及简单实例

Golang与python线程详解及简单实例在GO中&#xff0c;开启15个线程&#xff0c;每个线程把全局变量遍历增加100000次&#xff0c;因此预测结果是 15*1000001500000.var sum intvar cccc intvar m *sync.Mutexfunc Count1(i int, ch chan int) {for j : 0; j < 100000; j {cc…

java 树状 子节点_java构建树形列表(带children属性)

/*** 树形表格工具类**authoryanggb*/public classTreeTableUtil {/*** 把列表转换为树结构**paramoriginalList 原始list数据*paramidFieldName 作为唯一标示的字段名称*parampidFieldName 父节点标识字段名*paramchildrenFieldName 子节点(列表)标识字段名*return树结构列表*…

python输出文本内容_python 打印文件里的内容

Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案 的最佳方案 标签: Android屏幕旋转AsyncTaskProgressDialog 2014-07-19 09:25 39227人阅读 评论(46) 收藏 举报 分类: [android 进阶之 ... Mysql查找所有项目开始时间比之前项目结束时间小的项目ID 这是之前遇到…

python中八皇后如何运算的_python解决八皇后算法

展开全部global col #定义一些全局变量global rowglobal pos_diagglobal nag_diagglobal countdef output(): 输出一种有效结果global countprint rowcount 1def do_queen(i): 生成所有正确解param i: 皇后的数目for j in range(0, 8): #依次62616964757a686964616fe59b9ee7ad…

java实现复制粘贴的计算器_软帝学院教你用java编写计算器(三)

教你用java编写计算器(三)import java.awt.Color;import java.awt.Dimension;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax…

php 公众号验证回调方法_如何进行公众号文章收集 两种收集方法详解

大家都知道优质的公众号吸引用户最关键的就是要优质的文章&#xff0c;所以会有专人负责进行公众号文章收集工作&#xff0c;下面我们跟随拓途数据一起来了解一下如何进行公众号文章收集的相关资料吧。 如何进行公众号文章收集方案一&#xff1a;基于搜狗入口 在网上能搜索到的…

mysql保存一个文件怎么打开_悄悄告诉你,MySQL 通过SQL语句导出到Excel的方法-sql文件怎么打开...

执行SQL语句select fullname,time,endtime,closed from chat_archive into outfile c:/xxx.xls注意&#xff1a;因为office默认的是gb2312编码&#xff0c;服务器端生成的很有可能是utf-8编码&#xff0c;此时有几种选择1、把查询出来的结果转换为GB2312格式(字段fullname)sele…

gerber文件怎么导贴片坐标_SMT贴片机在线编程调试

SMT贴片机分为离线编程和在线编程调试&#xff0c;在线编程调试就是在 SMT 贴片机上对离线编程的程序进行优化调试编辑。SMT 贴片机在线编程调试总体上就是两个步骤&#xff0c;一个是离线编程的程序进行编程&#xff0c;然后就是总体检查并备份到贴片机电脑内。一、在 SMT 贴片…