Java多线程Socket的实现

应用多线程来实现服务器与多客户端之间的通信

1.基于TCP协议的Socket实现

在这里插入图片描述

工具类

public class ThreadUtils extends Thread{

    private Socket socket = null;

    public ThreadUtils (Socket socket){//创建构造方法
        this.socket = socket;
    }

    public void run() {
        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader bf = null;
        try {
            is = socket.getInputStream(); //获得字节输入流
            isr = new InputStreamReader(is);//将字节输入流转为 字符输入流
            bf = new BufferedReader(isr); //将字符输入流加入缓冲区
            String data = null;//返回的数据
            while (bf.readLine()!=null){
                data = bf.readLine(); //读取数据
            }
            socket.shutdownInput();//关闭输入流

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(bf!=null)
                    bf.close();
                if(isr!=null)
                    isr.close();
                if(is!=null)
                    is.close();
                if(socket!=null)
                    socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}

Action类

在这里插入图片描述

2.基于UDP协议的Socket实现

UDP协议(用户数据包协议)是无连接、不可靠、无序的。
速度相对而言比较快,进行传输的时候,首先会将要传输的数据定义成数据报(Datagram),在数据报中指明数据所要达到的Socket(主机地址和端口号),然后再将数据报发送出去。


相关操作类:


1.DatagramPacket :表示数据报包
2.DatagramSocket: 进行端到端通信的类

在这里插入图片描述

在这里插入图片描述

具体的实现

在这里插入图片描述
如果想要响应客户端 , 则可以调用DatagramPacket.getInetAddress(); 这个方法拿到客户端的Inetaddress实例
在发送数据报回去

在这里插入图片描述

传输一个对象可以使用ObjectOutputStream
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_38083682/article/details/91421110