JAVA多线程服务器实现

之前就有听说过java多线程服务器的实现是通过Socket来实现,大致还是创建多个socket来实现的把。今天写了一份demo来模拟多线程服务器,可能实际开发并不是这样写的,但大题思路还是一样。
服务器端

package Socket;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
    public static void main(String[] args) throws IOException {
        //创建socket,绑定到65000端口
        ServerSocket serverSocket=new ServerSocket(65000);
        //循环用以监听
        while (true){//这是多线程的,通过循环创建多个socket来实现
            //监听65000端口,直到有客户端信息发过来
            Socket socket=serverSocket.accept();
            //执行相关操作
            new CaluteLength(socket).start();
        }
    }
}

服务器端调用方法

package Socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class CaluteLength extends Thread{
    //以Socket为成员变量
    private Socket socket;
    public CaluteLength(Socket socket){this.socket=socket;}

    @Override
    public void run(){
        try {
            //获取Socket输出流
            OutputStream outputStream=socket.getOutputStream();
            //获取输入流
            InputStream inputStream=socket.getInputStream();
            int ch=0;
            byte[] buff=new byte[1024];
            //buff用来读取输入的内容,ch用来获取数组长度
            ch=inputStream.read(buff);
            String content=new String(buff,0,ch);//把字节流转为字符串
            int i=0;
            System.out.println("这是客户端"+content+":"+i);
            while (true){
                i++;
                Thread.sleep(1000);
                System.out.println("这是客户端"+content+":"+i);
            }
            //如果有必要可以在输出流中写入要回传的数据
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

客户端

package Socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
    public static void main(String[] args) throws IOException {
        //创建Socket,并指定连接的是本机的端口号为65000的服务器socket
        Socket socket=new Socket("127.0.0.1",65000);
        // 获取输出流
        OutputStream outputStream=socket.getOutputStream();
        //获取输入流
        InputStream inputStream=socket.getInputStream();
        //转为byte数组,写到输入流中
        outputStream.write(new String("hello socket").getBytes());
        int ch=0;
        byte[] buff=new byte[1024];
        ch=inputStream.read(buff);
        String content=new String(buff,0,ch);//content是输入流的数据,即字符串长度
        System.out.println(content);
        inputStream.close();
        outputStream.close();
        socket.close();
    }
}

首先开启服务器端,然后开启客户端,可以开启多个客户端来实现测试多线程
JAVA多线程服务器实现_第1张图片
经过学习,总结出,在服务器端,通过ServerSocket,循环创建socket,当serverSocket.accept();接收到发过来的Socket消息时才会继续执行。然后这里是新建了一个方法类,它继承了Thread,重写了run方法,这也是实现多线程的基本方法,应该要很熟悉。只有多写这些多线程的实例才能真正理解多线程编程的艺术,运用到实际开发中。

你可能感兴趣的:(JAVA多线程服务器实现)