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