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();
}
}
}
}