客户端
import java.io.PrintWriter;
import java.net.Socket;
public class BIOClient {
public static void main(String[] args) throws Exception{
Socket client = new Socket("localhost", 9999);
//衍生自Socket的输出流打印对象到输出流
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
boolean flag = true;
while (flag){
String inputData = InputUtil.getString("请输入要发送的内容:").trim();
out.println(inputData);
if ("Done".equalsIgnoreCase(inputData)){
flag = false;
}
}
client.close();
}
}
服务器端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BIOServer {
public static void main(String[] args) throws Exception {
int port = 9999;
ServerSocket socket = new ServerSocket(port);
System.out.println("服务端已经启动,监听端口为:" + port);
boolean flag = true;
ExecutorService executorService = Executors.newFixedThreadPool(10);
while (flag) {
Socket client = socket.accept();
executorService.submit(new EchoClientHandler(client));
}
executorService.shutdown();
socket.close();
}
private static class EchoClientHandler implements Runnable {
private Socket client;
private boolean flag = true;
//BufferedReader衍生自Socket的输入输出流,从字符输入流中读取文本
BufferedReader in;
public EchoClientHandler(Socket client) {
this.client = client;
try {
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (flag) {
try {
String request = in.readLine().trim();
if (request != null) {
System.out.println("收到客户端发来的:" + request);
if ("Done".equals(request)) {
this.flag = false;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
try {
in.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
工具类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputUtil {
private static final BufferedReader KEYBOARD_INPUT = new BufferedReader(new InputStreamReader(System.in));
private InputUtil(){
}
public static String getString(String prompt){
boolean flag = true; //数据接受标记
String str = null;
while (flag){
System.out.println(prompt);
try {
str = KEYBOARD_INPUT.readLine(); // 读取一行数据
if(str == null || "".equals(str)){
System.out.println("数据输入错误,不允许为空!");
}else {
flag = false;
}
} catch (IOException e) {
e.printStackTrace();
}
}
return str;
}
}