java网络编程-可读写服务端

之前的服务端只管发数据,并没有对客户端的请求作出响应,这次我们对服务端进行改造,

接受客户端的请求,在请求的基础上加上hello,然后返回

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

//5 10 11 13 20
public class Server {

    public static void main(String[] args) throws Exception {
        System.out.println("==服务器的启动==");
        // 1.注册端口
        ServerSocket serverSocket = new ServerSocket(8888);
        while (true) {
            //2.每接收到客户端的连接,就新建一个线程进行处理
            Socket socket = serverSocket.accept();
            new ServerReadThread(socket).start();
            System.out.println(socket.getRemoteSocketAddress() + "上线!");
        }
    }

    static class ServerReadThread extends Thread {
        private Socket socket;

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

        @Override
        public void run() {
            BufferedWriter writer=null;
            BufferedReader reader=null;
            try {
                writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                //4.把字节输入流包装成自己需要的流进行数据的读取。
                reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //5.读到一行,加上hello,直接返回
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println("收到:" + line);
                    writer.write("hello,"+line+"\n");
                    writer.flush();
                }
            } catch (IOException e) {
                System.out.println(socket.getRemoteSocketAddress() + "下线!");
            }finally {
                try {
                    writer.close();
                    reader.close();
                    socket.close();
                } catch (IOException e) {
                    System.err.println(e.getMessage());
                }
            }
        }
    }
}

客户端代码也进行了改造,从命令行读取数据,然后写入socket,再从socket读取数据,打印到屏幕

import java.io.*;
import java.net.Socket;
public class Client {
    public static void main(String[] args) {
        System.out.println("==客户端的启动==");
        Socket socket = null;
        BufferedReader reader = null;
        BufferedWriter writer = null;
        BufferedReader consoleReader = null;
        try {
            socket=new Socket("127.0.0.1",8888);
            reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            consoleReader=new BufferedReader(new InputStreamReader(System.in));
            while (true){
                String line = consoleReader.readLine();
                writer.write(line+"\n");
                writer.flush();

                String msg= reader.readLine();
                System.out.println(msg);
                //客户端输入quit代表结束
                if(line.equalsIgnoreCase("quit")){
                    break;
                }
            }
        } catch (IOException e) {
            System.err.println(e);
        }finally {
            try {
                writer.close();
                socket.close();
                System.out.println("关闭socket");
                reader.close();
                consoleReader.close();
            } catch (IOException e) {
                System.err.println(e.getMessage());
            }
        }
    }


}

 

posted @ 2023-02-28 17:30  Mars.wang  阅读(24)  评论(0)    收藏  举报