java网络(socket)中传输序列化对象
java网络(socket)中传输序列化对象
Person类,注意(两个项目中的Person类字节码要相同)
package socket;
import java.io.Serializable;
public class Person implements Serializable{
/**
* 序列化id
*/
private static final long serialVersionUID = -6172176307319540879L;
private String name;
private Integer age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String name, Integer age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
服务端代码:
package socket;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServerTest {
public static void main(String[] args) throws Exception {
// 监听指定的端口
int port = 8989;
ServerSocket server = new ServerSocket(port);
System.out.println("服务端等待连接");
// server将一直等待连接的到来
Socket socket = server.accept();
InputStream inputStream = socket.getInputStream();
ObjectInputStream in=new ObjectInputStream(inputStream);
Person p = (Person) in.readObject();
System.out.println("收到客户端消息:" +p);
//返回给客户端消息
OutputStream outputStream = socket.getOutputStream();
Person s=new Person("服务端",102,server.getInetAddress().getHostAddress());
//s为传送对象
ObjectOutputStream out=new ObjectOutputStream(outputStream);
out.writeObject(s);
out.flush();
inputStream.close();
outputStream.close();
out.close();
in.close();
socket.close();
server.close();
}
}
客户端代码:
package socket;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
public class SocketClient {
public static void main(String args[]) throws Exception {
// 要连接的服务端IP地址和端口
String host = "127.0.0.1";
int port = 8989;
// 与服务端建立连接
Socket socket = new Socket(host, port);
// 建立连接后获得输出流
OutputStream outputStream = socket.getOutputStream();
Person p=new Person("客户1",12,socket.getInetAddress().getHostAddress());
//p为传送对象
ObjectOutputStream o= new ObjectOutputStream(socket.getOutputStream());
o.writeObject(p);
o.flush();
//通过shutdownOutput高速服务器已经发送完数据,后续只能接受数据
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
ObjectInputStream in=new ObjectInputStream(inputStream);
Person s= (Person) in.readObject();
System.out.println("服务端回复消息:" + s);
in.close();
o.close();
inputStream.close();
outputStream.close();
socket.close();
}
}
评论区
请写下您的评论...
猜你喜欢
blog
java序列化和反序列化
java基础
3788
传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。反序列化:客户端从
ofc
计算机网络-物理层下面的传输媒体
official
875
《计算机网络第七版谢希仁》
[TOC] 传输媒体也称为传输介质或传输媒介,它就是数据传输系统中在发送器和接收器之间的物理通路。传输媒体可分为两大类,即导引型传输媒体和非导引型传输媒体(这里的“导引
java序列化储存
2781
序列化和反序列化请参考:http://www.jiajiajia.club/blog/artical/yjw520/161源码下载地址:http://photo.jiajiajia.club
java虚拟机(jvm)
4454
Java对象的创建Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象
ofc
计算机网络-PPP点对点协议
official
751
《计算机网络第七版谢希仁》
[TOC] 在通信线路质量较差的年代,在数据链路层使用可靠传输协议曾经是一种好办法。因此,能实现可靠传输的高级数据链路控制HDLC(High
ofc
计算机网络的性能指标
official
929
”越宽,其所能传输的“最高数据率”也越高。
三、吞吐量 吞吐量(throughput)表示在单位时间内通过某个网络(或信道、接口)的实际的数据量。吞吐量更经常地用于对现实世界中的网络的一种测量,以便
blog
java格式化打印对象(json格式)
java基础
2658
失败的代码,因为没有考虑数组和集合的情况~!!!classFormatPrintf{publicstaticTvoidprint(Tt)throwsException{if(isPrimitive(t.getClass())){System.out.println(t);}System.out.println("{");dfs(t,0);System.out.println("}");}priva
official
1480
编码器和解码器在网络应用中需要实现某种编解码器,将原始字节数据与自定义的消息对象进行互相转换。网络中都是以字节码的数据形式来传输数据的,服务器编码数据后发送到客户端,客户端需要对数据进行解码
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。