import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class EchoThread implements Runnable {
private Socket client = null;
public EchoThread(Socket client) {
this.client = client;
}
public void run() {
PrintStream out = null; // 打印流輸出最方便
BufferedReader bufferedReader = null;// 接收輸入流
try {
out = new PrintStream(client.getOutputStream());// 輸出流
// 準備接收客戶端的輸入信息
bufferedReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
boolean flag = true ; // 標誌位,表示可以一直接收並回應信息
while (flag) {
String acceptContent = bufferedReader.readLine();// 接收客戶端發送的內容
if ("quit".equals(acceptContent)|| (acceptContent == null)) {//如果輸入quit就退出
flag = false;
} else if ("".equals(acceptContent.trim())) {//沒有內容
out.println("Echo : 請輸入內容 ");
} else {
System.out.println(acceptContent);
out.println("Echo : " + acceptContent);//迴應信息
}
}
bufferedReader.close();
out.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class EchoThreadServer {
public void startSocket() {
ServerSocket server = null; // 定義ServerSocket類
Socket client = null; // 表示客 戶端
try {
server = new ServerSocket(8888); // 服務器在8888端口上監聽
boolean flag = true; // 定義個標記位
while (flag) {
System.out.println("服務器運行,等待客戶端連接。");
client = server.accept(); // 得到連接,程序進入到阻塞狀態
// 1.
// new Thread(new EchoThread(client)).start(); // 每一個客戶端表示一個線程
//2.
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new EchoThread(client));
}
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
EchoThreadServer echoThreadServer = new EchoThreadServer();
echoThreadServer.startSocket();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class EchoClient {
public static void main(String[] args) {
Socket client = null;// 客戶端
BufferedReader input = null;// 接收鍵盤數據
BufferedReader buf = null;// 一次接收服務器數據
PrintStream out = null;// 發送數據
Boolean flag = true;//標識
try {
client = new Socket("localhost", 8888);
input = new BufferedReader(new InputStreamReader(System.in));// 鍵盤數據
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));// 服務器響應數據
out = new PrintStream(client.getOutputStream());// 發送數據
while (flag) {
System.out.println("輸入信息 : ");
String str = input.readLine();// 接收鍵盤輸入信息
out.println(str);//發送數據
if ("quit".equals(str)) {//如果輸入quit就退出
flag = false;
} else {
System.out.println(buf.readLine());//接收返回結果,輸出結果信息
}
out.flush();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {//釋放資源
try {
out.close();
buf.close();
input.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}