还记得之前的《超级人工智障》?
学习了网络编程我们来微微加强一下
运行结果:
服务器代码:
public class Server {
public static void main(String[] args) throws IOException {
//1. 启动服务器,并侦听 888 端口号
ServerSocket server = new ServerSocket(8888);
//2. 打印输出提示
System.out.println("服务器已启动,等待客户端链接。。。");
//3. 等待客户端链接
Socket socket = server.accept();
System.out.println("一个客户端连接成功"+socket.getInetAddress().toString());
//4. 获取输入流
//4.1 获取输入流
InputStream is = socket.getInputStream();
//4.2 将输入的字节流 ,转换为字符流,转换为逐行读取流
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
//5. 获取输出流
//5.1 获取输出流
OutputStream os = socket.getOutputStream();
//5.2 将字节输出流, 转换为打印流
PrintStream ps = new PrintStream(os);
while (true){
//6. 循环读取一行行的数据 ,读取操作会导致线程的阻塞, 直到客户端真的发送了数据,
//服务器才能接到, 顺序继续执行下面的代码
String question = br.readLine();
//7. 将这个文字, 再打印给客户端
question = question.replace("吗","");
question = question.replace("我","我也");
question = question.replace("?","!");
ps.println("AI:"+question);
if ("886".equals(question)){
break;
}
}
}
}
客户端代码:
public class Bese {
public static void main(String[] args) throws IOException {
//1. 连接服务器
Socket socket = new Socket("127.0.0.1",8888);
//2. 输出流给服务器
//2.1 产生并接受输出流
OutputStream os = socket.getOutputStream();
//2.2 将输出流, 转换为打印流
PrintStream ps = new PrintStream(os);
//3. 得到输入流
//3.1 得到输入流
InputStream is = socket.getInputStream();
//3.2 将字节输入流, 转换为字符输入流 , 并转换为逐行读取流
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
//4. 循环接收用户输入
Scanner input = new Scanner(System.in);
while (true){
System.out.print("你:");
String text1 = input.nextLine();
//5. 将用户输入的内容, 发送给服务器
ps.println(text1);
//6. 接收服务器回复的消息
String text2 = br.readLine();
System.out.println(text2);
if ("886".equals(text1)){
break;
}
}
}
}
对上面加入多线程::开始跳