首页 > 解决方案 > Java中套接字的OutputStreamWriter和InputStreamReader,我做错了什么?

问题描述

Socket在java中使用s,

public class Server {

    private static ServerSocket server;
    private static int port = 9876;
    static Socket p1 = null;
    static Socket p2 = null;

    public static void main(String args[]) throws IOException, ClassNotFoundException{
        server = new ServerSocket(port);
        Thread p1t = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    System.out.println("[Server] Waiting for connection");
                    p1 = server.accept();
                    System.out.println("[Server] Client connected");
                    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(p1.getOutputStream()));
                    BufferedReader in = new BufferedReader(new InputStreamReader(p1.getInputStream()));
                    String msg = String.valueOf(in.readLine());
                    System.out.println(msg);
                    out.write(msg);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        p1t.start();
    }

}

public class Client {
    public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
        Socket socket = new Socket(InetAddress.getLocalHost().getHostName(), 9876);
        if(socket.isConnected()) {
            System.out.println("[Client] Connected");
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while(true) {
                        try {
                            System.out.println(in.readLine());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
            while(true) {
                Scanner s = new Scanner(System.in);
                out.write(s.nextLine());
            }
        }
    }
}

客户端应该向服务器发送消息,服务器应该将该消息中继回客户端;但要么BufferedReaderforClient并且Server没有读取任何发送的内容,要么BufferedWriterforClient并且Server没有发送任何内容。

我也尝试out.write("test");在这两个类中使用手动发送文本。

在这种情况下我做错了什么?

标签: javasocketsbufferedreaderbufferedwriter

解决方案


推荐阅读