编写一个服务器端/客户端程序,对客户输入的字符串,服务器端以“客户端:”开头再返回

1.首先建立服务端程序

/**
 * @ClassName: Question1
 * @Description: 编写一个服务器端/客户端程序,对客户输入的字符串,服务器端以“客户端:”开头再返回
 * @Author: 
 * @Date: 2019/6/10
 */
public class Question1 {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);//绑定指定端口
        System.out.println("服务端启动。。。");
        while (true){
            Socket socket = serverSocket.accept();//监听端口
            System.out.println("监听端口。。。");
            new Thread(new ServerThread(socket)).start();//启动线程
        }
    }
}

2.建立服务器端多线程,用于循环监听客户端输入的内容,并加以处理后返回给客户端

/**
 * @ClassName: ServerThread
 * @Description: 对客户端传递过来的内容进行处理后再返回给客户端
 * @Author: 
 * @Date: 2019/6/10
 */
public class ServerThread implements Runnable {

    public Socket socket;

    public ServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        //输出内容
        try {
            //读取客户端传递过来的内容
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            while (true){
                String readLine = br.readLine();
                String cliStr = "客户端:"+readLine;//将客户端传递过来的内容加前缀并写回客户端
                PrintWriter pw = new PrintWriter(socket.getOutputStream());
                pw.println(cliStr);
                pw.flush();
                System.out.println("客户端内容:"+readLine);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.编写客户端程序

/**
 * @ClassName: ClientQuest
 * @Description: 客户端程序
 * @Author: 
 * @Date: 2019/6/10
 */
public class ClientQuest {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost",8888);
        System.out.println("请输入内容:");
        while (true){
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//读取控制台输入的内容
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            pw.println(br.readLine());//将读取的内容写入到服务器
            pw.flush();//刷新缓存
            new Thread(new ClientThread(socket)).start();
        }

    }
}

4.编写客户端多线程,用于多次输入内容,将控制台输入的内容传递给服务端,并将服务端处理后的内容输出到控制台

/**
 * @ClassName: ClientThread
 * @Description:
 * @Author: 
 * @Date: 2019/6/10
 */
public class ClientThread implements Runnable {

    public Socket socket;

    public ClientThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        BufferedReader br2 = null;
        try {
            //读取服务端传递过来的内容
            br2 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String readLine = br2.readLine();
            System.out.println("服务端返回的内容:");
            //输出内容
            System.out.println(readLine);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

依次启动服务器端和客户端

测试结果:

客户端:

请输入内容:
客户端测试1
服务端返回的内容:
客户端:客户端测试1
客户端测试2
服务端返回的内容:
客户端:客户端测试2

服务端:

服务端启动。。。
监听端口。。。
客户端内容:客户端测试1
客户端内容:客户端测试2

猜你喜欢

转载自blog.csdn.net/LSW_JAVADP/article/details/91405327