多线程实现多客户端通信

来源:互联网 发布:简单图案的3b编程 编辑:程序博客网 时间:2024/05/18 11:23

开线程处理客户端连接:

public class ServerThread extends Thread {    private Socket socket=null;    public ServerThread(Socket socket){        this.socket=socket;    }    @Override    public void run() {        //3、获取输入流,并读取客户端信息        InputStream is= null;        InputStreamReader isr= null;        BufferedReader br= null;        OutputStream os= null;        PrintWriter pw= null;//包装为打印流        try {            is = socket.getInputStream();            //字节流转化为字符流            isr = new InputStreamReader(is);            //设置缓冲            br = new BufferedReader(isr);            String data=null;            while((data=br.readLine())!=null){                System.out.println("我是服务器,客户端说:"+data);            }            socket.shutdownInput();//关闭输入流            //4、获取输出流,响应客户端的请求            os = socket.getOutputStream();            pw = new PrintWriter(os);            pw.write("欢迎您!");            pw.flush();            socket.shutdownOutput();//关闭输出流        } catch (IOException e) {            e.printStackTrace();        }finally {            //5、关闭资源            try {                if(pw!=null)                    pw.close();                if(os!=null)                    os.close();                if(br!=null)                    br.close();                if(isr!=null)                    isr.close();                if(is!=null)                    is.close();                socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}
服务端:

public class Server {    public static void main(String[] args){        try {            //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口            ServerSocket serverSocket=new ServerSocket(8888);            int count=0;//统计客户端的数量            //2、调用accept()方法开始坚挺,等待客户端的连接            System.out.println("***服务器即将启动,等待客户端的连接***");            Socket socket=null;            while (true){                socket=serverSocket.accept();                ServerThread serverThread=new ServerThread(socket);                serverThread.start();                count++;                System.out.println("当前客户端的数量为:"+count);                InetAddress inetAddress=socket.getInetAddress();                System.out.println("客户端的IP地址为:"+inetAddress.getHostAddress());            }        } catch (IOException e) {            e.printStackTrace();        }    }}
客户端:

public class Client {    public static void main(String[] args){        try {            //1.创建客户端Socket,指定服务器地址和端口            Socket socket=new Socket("localhost",8888);            //2.获取输入流,像服务器发送信息            OutputStream os=socket.getOutputStream();//字节输入流            //将输入流包装为打印流            PrintWriter pw=new PrintWriter(os);            pw.write("用户名:tom;密码:123456");            pw.flush();            socket.shutdownOutput();//关闭输出流            //3.获取输入流,并读取服务器端的响应信息            InputStream is=socket.getInputStream();            BufferedReader br=new BufferedReader(                    new InputStreamReader(is)            );            String info=null;            while((info=br.readLine())!=null){                System.out.println("我是客户端,服务器说: "+info);            }            socket.shutdownInput();//关闭输入流            //4/关闭资源            br.close();            is.close();            pw.close();            os.close();            socket.close();        } catch (IOException e) {            e.printStackTrace();        }    }}
输出:

***服务器即将启动,等待客户端的连接***
当前客户端的数量为:1
客户端的IP地址为:127.0.0.1
我是服务器,客户端说:用户名:tom;密码:123456
当前客户端的数量为:2
客户端的IP地址为:127.0.0.1
我是服务器,客户端说:用户名:admin;密码:123

0 0
原创粉丝点击