socket发送和接受对象信息

本文介绍了一个使用Java实现的Socket通信案例,重点展示了如何通过Socket在客户端和服务端之间传输自定义对象。该示例包括了客户端和服务端的具体实现,涵盖了序列化和反序列化的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package test0421;

import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author zhongzhilong
 * @date 2021/4/21
 * @description socket传输对象-服务端
 */
public class SocketObjectServerTest {
    public static void main(String[] args) {
        try {
            System.out.println("----服务端已连接-----");
            ServerSocket serverSocket = new ServerSocket(9200);
            Socket socket = serverSocket.accept();
            // socket获取输入流
            InputStream in = socket.getInputStream();
            // ObjectInputStream序列化输入流
            ObjectInputStream ois = new ObjectInputStream(in);
            // Student为传递对象
            SocketObjectClientTest.Student student = (SocketObjectClientTest.Student) ois.readObject();
            String msg = "id: " + student.getId() + ",name: " + student.getName();
            System.out.println("我是服务端,客户端说:" + msg);
            socket.shutdownInput();
            // socket获取输出流
            OutputStream os = socket.getOutputStream();
            // 输出流转打印流
            PrintWriter pw = new PrintWriter(os);
            pw.write("已收到消息");
            // 刷新缓存
            pw.flush();
            socket.shutdownOutput();
            pw.close();
            os.close();
            ois.close();
            in.close();
            socket.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

package test0421;

import java.io.*;
import java.net.Socket;

/**
 * @author zhongzhilong
 * @date 2021/4/21
 * @description socket通信传输对象-客户端
 */
public class SocketObjectClientTest {
    public static void main(String[] args) {
        try {
            System.out.println("--------客户端开始连接服务端------");
            Socket socket = new Socket("localhost", 9200);
            OutputStream os = socket.getOutputStream();
            // 使用ObjectOutputStream对象序列化输出流,传递对象
            ObjectOutputStream oos = new ObjectOutputStream(os);
            // 封装对象
            Student stu = new Student(1, "小明");
            // 序列化
            oos.writeObject(stu);
            socket.shutdownOutput();

            // 输入字节流
            InputStream in = socket.getInputStream();
            // 字节流转字符流
            InputStreamReader reader = new InputStreamReader(in);
            // 字符流添加进缓冲
            BufferedReader br = new BufferedReader(reader);
            String msg = br.readLine();
            while (msg != null) {
                System.out.println("我是客户端,服务器说:" + msg);
                msg = br.readLine();
            }
            br.close();
            reader.close();
            in.close();
            oos.close();
            os.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static class Student implements Serializable {
        private int id;
        private String name;

        public Student(int id, String name) {
            this.id = id;
            this.name = name;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值