基于java.net.socket包的对象传递
本案例代码使用java.net.socket和java.io包下的相关api实现了对象传递。
相关代码如下:
服务端代码 ServerSocketHomework:
package com.etc.test; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.net.ServerSocket; import java.net.Socket; import com.etc.entity.Emp; /** * 1. 实现传递对象;自定义对象; emp对象? * * @author Administrator * */ public class ServerSocketHomework { public static void main(String[] args) { // TODO Auto-generated method stub ServerSocket serverSocket = null; Socket socket = null; InputStream is = null; ObjectInputStream ois = null; // 处于监听状态,等待连接 try { serverSocket = new ServerSocket(1234); System.out.println("服务端正在监听...."); // 返回一个socket对象,这个socket对象的功能? socket = serverSocket.accept(); is = socket.getInputStream(); // 读对象[反序列化] ois = new ObjectInputStream(is); Object obj = ois.readObject(); if (obj instanceof Emp) { Emp emp = (Emp) obj; System.out.println("emp :" + emp); } } catch (IOException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 释放资源 try { serverSocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { ois.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
客户端代码:ClientHomework
package com.etc.test; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner; import com.etc.entity.Emp; /** * 1. 实现传递对象;自定义对象; emp对象? * * @author Administrator * */ public class ClientHomework { public static void main(String[] args) { Socket socket = null; OutputStream os = null; ObjectOutputStream oos = null; Scanner input = new Scanner(System.in); // 处于监听状态,等待连接 try { // 换这个socket是和serversocket进行交互的对象 socket = new Socket("127.0.0.1", 1234); os = socket.getOutputStream(); // 写[序列化的过程] oos = new ObjectOutputStream(os); System.out.println("请输入员工的id,name,age,address,job,sal"); int id = input.nextInt(); String name = input.next(); int age = input.nextInt(); String address = input.next(); String job = input.next(); double sal = input.nextDouble(); Emp emp = new Emp(id, name, age, address, job, sal); oos.writeObject(emp); System.out.println("传输成功~"); input.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 释放资源 try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
上例中使用的实体类,要自己定义,注意要实现序列化接口: