服务端:
public class EchoServer {
public static void main(String[] args) throws IOException {
// 创建一个服务端的服务对象
ServerSocket server = new ServerSocket(8888); //该服务在9999端口
// 服务端监听端口,收到Client的连接信号后返回一个包含服务端向客户端连接的Socket对象
Socket client = server.accept(); //等待客户端连接时,程序进入阻塞状态
// 写入服务端的客户端输出流
Scanner scan = new Scanner(client.getInputStream());
scan.useDelimiter("\n");
// 创建对客户端的输出流
PrintStream out = new PrintStream(client.getOutputStream());
boolean flag = true; //循环标记
while(flag) { //循环
if (scan.hasNext()) { //如果有字符串
String str = scan.next().trim(); //赋值当前字符串并删除其中的空格包括换行
// 字符串忽略大小写比较
if("byebye".equalsIgnoreCase(str)) {
out.println("byebye"); //发送到客户端
flag = false;
break; //找到匹配字符串时结束整个程序
}
out.println("ECHO:" + str); //未匹配时的输出
}
}
}
}
客户端:
public class EchoClient {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket client = new Socket("localhost",8888);
Scanner keyScan = new Scanner(System.in); //用户输入信息,回车结束输入
// 等待服务端的输出(客户端的写入)
Scanner netScan = new Scanner(client.getInputStream());
// 创建一个对服务端的打印输出流
PrintStream netOut = new PrintStream(client.getOutputStream());
boolean flag = true;
while (flag) {
System.out.println("请输入要发送的信息:");
if (keyScan.hasNext()) { //如果存在输入信息
String str1 = keyScan.next().trim(); //读取字符串信息
netOut.println(str1); //发送到服务端
if(netScan.hasNext()) {
String str2 = netScan.next().trim();
System.out.println(str2);
if("byebye".equals(str2)) { //收到服务器的结束语后结束程序
flag = false;
break;
}
}
}
}
}
}