• 网络编程应用:基于TCP协议【实现对象传输】--练习


    要求:

    基于TCP协议实现,客服端向服务器发送一个对象
    服务器接受并显示用户信息 ,同时返回给客户端 "数据已收到"
    
    建一个Student类,属性:name age
    

    Student类

    package Homework3;
    
    import java.io.Serializable;
    
    public class Student implements Serializable {
        private static final long serialVersionUID = 1L;
        private String name;
        private int age;
        private String sex;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        @Override
        public String toString() {
            return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
        }
        public Student(String name, int age, String sex) {
            super();
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
        public Student() {
            super();
        }
    
    }
    

    客户端:

    package Homework3;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.ObjectOutputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class Client {
        public static void main(String[] args) {
            System.out.println("客户端已启动!");
    
            //1.创建要传输的Student对象
            Student student=new Student("吴德利", 30, "女");
    
            Socket socket=null;
            OutputStream os=null;
            InputStream is=null;
            ObjectOutputStream oos=null;
            byte[] b=new byte[1024];
    
            try {
                //2.创建Socket对象,并得到相应的输出流----以及创建对象流
                socket=new Socket("localhost", 9999);
                os=socket.getOutputStream();
                oos=new ObjectOutputStream(os);
    
                //3.将对象发送给服务器
                oos.writeObject(student);
    
                //4.接收服务器端传输完毕,返回的回复
                is=socket.getInputStream();
                is.read(b);
                String string=new String(b);
                System.out.println(string);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if(os!=null){
                    try {
                        os.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(is!=null){
                    try {
                        is.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(socket!=null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(oos!=null){
                    try {
                        oos.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
    
        }
    }
    

    服务器端:

    package Homework3;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.ObjectInputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
        public static void main(String[] args) {
            System.out.println("服务器端已启动!");
    
            ServerSocket serverSocket=null;
            Socket socket=null;
            ObjectInputStream ois=null;
            OutputStream os=null;
            InputStream is=null;
            try {
                //1.创建ServerSocket对象,获得Socket对象以及输入
                serverSocket=new ServerSocket(9999);
                socket=serverSocket.accept();
                is=socket.getInputStream();
    
                //2.创建对象流
                ois=new ObjectInputStream(is);
    
                //3.接收数据,并将接收的对象转为原来的对象类型
                Student student=(Student)ois.readObject();
                System.out.println(student);
    
                //4.返回给客户端,"数据已收到"
                os=socket.getOutputStream();
                os.write("数据已收到".getBytes());
                os.flush();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(serverSocket!=null){
                    try {
                        serverSocket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(socket!=null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(os!=null){
                    try {
                        os.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(is!=null){
                    try {
                        is.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(ois!=null){
                    try {
                        ois.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    运行结果:

    客户端:
    这里写图片描述


    服务器端:

    这里写图片描述

  • 相关阅读:
    Codeforces Round #333 (Div. 2) B. Approximating a Constant Range st 二分
    Codeforces Round #333 (Div. 2) A. Two Bases 水题
    SPOJ 1557. Can you answer these queries II 线段树
    线段树 模板
    Codeforces Round #115 B. Plane of Tanks: Pro 水题
    Codeforces Round #115 A. Robot Bicorn Attack 暴力
    Codeforces Beta Round #51 C. Pie or die 博弈论找规律 有趣的题~
    Codeforces Beta Round #51 B. Smallest number dfs
    Codeforces Beta Round #51 A. Flea travel 水题
    Codeforces Beta Round #51 D. Beautiful numbers 数位dp
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6809617.html
Copyright © 2020-2023  润新知