Java多线程聊天对话框

来源:互联网 发布:沪深300指数月度数据 编辑:程序博客网 时间:2024/06/06 05:40

Java实现双人聊天框


Java为了实现同步机制,需要使用多线程技术
在多线程中两种中,本次使用的继承Thread类,当然也可以实现runnable

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class SocketLineDemo {    public static void main(String[] args) throws Exception {        System.out.println("please select server or client:");        String s0 = new BufferedReader(new InputStreamReader(System.in)).readLine();        if(s0.equals("server")){            System.out.println("input server of port:");            String s2 = new BufferedReader(new InputStreamReader(System.in)).readLine();            int port = Integer.parseInt(s2);            System.out.println("monitor:"+port);            while(true){                Socket s = new ServerSocket(port).accept();                System.out.println("user  "+s.getInetAddress().getHostName()+":successfully connecting");                new FromKeyToNet(s).start();                new FromNetToSreen(s).start();            }        }else if(s0.equals("client")){            System.out.println("you must be input IPAddress and port ");            System.out.println("eg:192.168.1.1,9999");            String s3 = new BufferedReader(new InputStreamReader(System.in)).readLine();            String a[] = s3.split(",");            Socket s = new Socket(a[0],Integer.parseInt(a[1]));            System.out.println("Client is successfully connecting to Server");            new FromKeyToNet(s).start();            new FromNetToSreen(s).start();        }else{            System.out.println("you select is error!");        }    }}class FromKeyToNet extends Thread{    private Socket s = null;    public FromKeyToNet(Socket s) {        super();        this.s = s;    }    public void run(){        try {            //增加键盘读取速度            BufferedReader rb = new BufferedReader(                    new InputStreamReader(System.in));            PrintWriter pw = new PrintWriter(s.getOutputStream());            while(true){//无限的发送                String s1 = rb.readLine();                if(s1.equals("exit")) break;                pw.println(s1);                pw.flush();            }        } catch (Exception e) {        }    }}class FromNetToSreen extends Thread{    private Socket s = null;    public FromNetToSreen(Socket s) {        super();        this.s = s;    }    public void run(){        try {            while(true){//无限的读取                BufferedReader br1 = new BufferedReader(                        new InputStreamReader(s.getInputStream()));                 String s2 = br1.readLine();                System.out.println(s2);            }        } catch (Exception e) {        }    }}

new BufferedReader(new InputStreamReader(
System.in)); 从键盘读取数据,大部分情况更快

0 0