Java多線程聊天對話框

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)); 從鍵盤讀取數據,大部分情況更快

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章