Java serializable:套接字在网络上传送对象
来源:互联网 发布:修改数据导入考勤机 编辑:程序博客网 时间:2024/05/16 11:10
1.概念上的内容请参考,里面说的很详细了,包括什么时候用serializable,有什么特点等
http://www.2cto.com/kf/201405/305380.html
什么情况下需要序列化
a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
第一种情况和第二种很类似,这里贴上一个用套接字在网络上传送对象的例子
用套接字在网络上传送对象:
1.首先建立要传输的对象
//建立用来持续化的对象import java.io.Serializable;public class ObjectSeri implements Serializable{//成员变量写成static的话是不能被持久化的//private关键字是不能被持久化的,脱离了JVM,成员变量是不在JVM的安全机制之内private String name;private String age;public String getName() {return name;}public String getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(String age) {this.age = age;}}2.有了传输的对象,下一步就是建立一个服务端线程来监听socket端口,并且在run方法里面实现读取对象的数据
import java.io.IOException;import java.io.ObjectInputStream;import java.net.ServerSocket;import java.net.Socket;//serverTest类继承thread类,监听端口来的信息public class serverTest extends Thread {//private final String serverIP = "127.0.0.1";private final int serverPort = 3400;private ServerSocket server;public serverTest() {try {// ServerSocket server=new ServerSocket(serverPort);server = new ServerSocket(serverPort);System.out.println("正在监听3400端口");} catch (IOException e) {e.printStackTrace();}}public void run() {Socket socket = null;ObjectInputStream in;while (true) {try {synchronized (server) {socket = server.accept();}System.out.println("当前的连接是:"+ socket.getInetAddress().toString());socket.setSoTimeout(20000);in = new ObjectInputStream(socket.getInputStream());ObjectSeri data = (ObjectSeri) in.readObject();System.out.println("The name is:" + data.getName()+ "and age is:" + data.getAge());in.close();in = null;socket.close();} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}} public static void main(String args[]) { (new serverTest()).start(); }}3.最后,建立一个客户端来测试下
import java.io.ObjectOutputStream;import java.net.InetSocketAddress;import java.net.Socket;//建立一个client测试类public class TestClient {private String address = "127.0.0.1";private int port = 3400;public TestClient() {// Prepare the data need to transmitObjectSeri data = new ObjectSeri();data.setName("Scott");data.setAge("34");Socket client = new Socket();InetSocketAddress adr = new InetSocketAddress(this.address, this.port);try {client.connect(adr, 10000);ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());// send objectout.writeObject(data);out.flush();out.close();out = null;data = null;client.close();client = null;} catch (java.io.IOException e) {System.out.println("IOException :" + e.toString());}}public static void main(String[] args) {new TestClient();}}
输出结果如下:
正在监听3400端口
当前的连接是:/127.0.0.1
The name is:Scottand age is:34
0 0
- Java serializable:套接字在网络上传送对象
- Java serializable:套接字在网络上传送对象
- Java网络通信套接字
- Java套接字编程(上)
- Java套接字编程(上)
- Java套接字编程(上)
- Java套接字编程(上)
- 对象的 Serializable 以及在网络流中间的应用
- java 在TCP网络连接上传递对象
- java学习之在tcp网络上传递对象
- java 传送对象方面
- Java 对象Serializable
- JAVA网络编程 Datagram套接字
- JAVA网络编程 Datagram套接字
- java基础之网络套接字编程
- Java网络基础之套接字
- 【网络编程1】Java套接字Socket
- JAVA021 -- java网络编程之套接字
- java自学之路-----水水水
- http常用header
- oracle DUL/PRM 工具说明
- Java面试、笔试题
- httplib2 ssl.c:499错误
- Java serializable:套接字在网络上传送对象
- Oracle VM VirtualBox和vmware网络冲突
- 获取本机ip(有问题版)
- 暗示法萨芬撒的飞洒
- iOS笔记:内存管理
- iOS tableview viewForHeaderInSection 自定义
- 一、Java的基础语法
- 【自考】数据库系统原理(二)——详解(数据库系统基本概念)
- thrift通过TServerEventHandler获取客户端ip