java网络(socket)中传输序列化对象

硅谷探秘者 2626 0 0


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


menu.saveimg.savepath20190401174828.jpg


客户端代码:

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


2.jpg

猜你喜欢
java基础 3461 递性。是把转换成有字节流,以便在或者保存在本地文件后的字节流保存了Java的状态以及相关的描述信息。机制的核心作用就是状态的保存与重建。反:客户端从
official 579 《计算机第七版谢希仁》 [TOC]  媒体也称为介质或媒介,它就是数据系统在发送器和接收器之间的物理通路。媒体可分为两大类,即导引型媒体和非导引型媒体(这里的“导引
java序列化储存 2754 和反请参考:http://www.jiajiajia.club/blog/artical/yjw520/161源码下载地址:http://photo.jiajiajia.club
java虚拟机(jvm) 4093 Java的创建Java是一门面向的编程语言,在Java运行过程无时无刻都有被创建出来。在语言层面上,创建(例如克隆、反)通常仅仅是一个new关键字而已,而在虚拟机,
official 508 《计算机第七版谢希仁》 [TOC]  在通信线路质量较差的年代,在数据链路层使用可靠协议曾经是一种好办法。因此,能实现可靠的高级数据链路控制HDLC(High
official 651 ”越宽,其所能的“最高数据率”也越高。 三、吞吐量  吞吐量(throughput)表示在单位时间内通过某个(或信道、接口)的实际的数据量。吞吐量更经常地用于现实世界的一种测量,以便
java基础 2242 失败的代码,因为没有考虑数组和集合的情况~!!!classFormatPrintf{publicstaticTvoidprint(Tt)throwsException{if(isPrimitive(t.getClass())){System.out.println(t);}System.out.println("{");dfs(t,0);System.out.println("}");}priva
official 1019 编码器和解码器在应用需要实现某种编解码器,将原始字节数据与自定义的消息进行互相转换。都是以字节码的数据形式来数据的,服务器编码数据后发送到客户端,客户端需要数据进行解码
归档
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
标签
算法基础 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
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。