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 @   Mars.wang  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2019-02-28 impala学习笔记
点击右上角即可分享
微信分享提示