学会使用 Socket,学习服务器和客户端之间的通讯

92 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.写一个可以提供回答问题的服务平台的软件 以一问一回的方法完成

实现代码:

 //服务器端
 package com.zhangyufan.net;
 ​
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.UnknownHostException;
 import java.util.Scanner;
 ​
 public class AnswerServer {
 ​
     public static void main(String[] args) throws UnknownHostException, IOException {
         ServerSocket ss = new ServerSocket(10000);
         while (true) {
             Socket s = ss.accept();
             InputStreamReader isr = new InputStreamReader(s.getInputStream());
             BufferedReader br = new BufferedReader(isr);
             String request = br.readLine();
             System.out.println("接收到了客户端的问题:" + request);
             PrintWriter pw = new PrintWriter(s.getOutputStream());
             System.out.println("请输入对该问题的回答:");
             Scanner sc = new Scanner(System.in);
             String info = sc.next();
             pw.println(info);
             pw.close();
         }
 ​
     }
 ​
 }
 ​
 //客户端
 package com.zhangyufan.net;
 ​
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.net.Socket;
 import java.net.UnknownHostException;
 import java.util.Scanner;
 ​
 public class AskClient {
 ​
     public static void main(String[] args) throws UnknownHostException, IOException {
         Socket s = new Socket("192.168.0.104", 10000);
         PrintWriter pw = new PrintWriter(s.getOutputStream());
         System.out.println("连接已建立....................");
         System.out.println("请输入您想要问的问题:");
         Scanner sc = new Scanner(System.in);
         String info = sc.next();
         pw.println(info);
         pw.flush();
         InputStreamReader isr = new InputStreamReader(s.getInputStream());
         BufferedReader br = new BufferedReader(isr);
         String advice = br.readLine();
         System.out.println("接收到服务器的回答:" + advice);
         br.close();
 ​
     }
 ​
 }
 ​

运行结果: 这里要先说明一下,运行的时候要先运行服务器端,运行起来之后再去运行客户端,然后就会提问了,就可以跟着回答了。以下三张图是我运行起来之后按照顺序依次显示的内容。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述