首页 > 解决方案 > 来自套接字的 InputStream 和 OutputStream 阻塞

问题描述

我正在尝试编写一个简单的聊天/服务器程序。目前,我只是在玩代码,因为我对一般网络知之甚少,这只是一种希望学习新东西的实验,然后也许我会制作两个以上的 main() 函数. :)

但是,我遇到了客户端和服务器有点……停止的问题?我相信这被称为“阻塞”(你可以说我是 comp sci 的新手)。客户端应该向服务器发送消息,服务器应该读取消息,然后将其发回。但是在我输入消息后,双方都没有做任何事情。这是我的客户端:

    public static void main(String[] args) {
        
        try {
            System.out.println("Connecting");
            Socket socket = new Socket(ip, port);

            System.out.println("Connected! Type your msg:");
            Scanner s = new Scanner(System.in);
            String msg = s.nextLine();  
            socket.getOutputStream().write(msg.getBytes());


            //if I remove this part, literally everything works
            String str = new String(socket.getInputStream().readAllBytes());
    
            socket.close();
            System.out.println("Server sent back: " + str);
        
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        
    }

这是服务器版本:

    public static void main(String[] args) {
        
        try {
            ServerSocket server = new ServerSocket(6666);
            System.out.println("Waiting for connection");
            Socket client = server.accept();
            System.out.println("Connected to " + client);
            
            OutputStream out = client.getOutputStream();
            InputStream in = client.getInputStream();
            
            BufferedReader b = new BufferedReader(new InputStreamReader(in));
            String line = b.readLine();
            System.out.println("client typed " + line);
            out.write((line + "\n").getBytes());
        
            server.close();
            System.out.println("All done!");
        
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        
    }

有任何想法吗?我似乎无法找到任何真正的解释来说明这段代码发生了什么以使其停止。需要明确的是,它没有崩溃,它没有完成运行,客户端只是进入“键入你的消息:”而服务器只是进入“连接到客户端”,然后什么也没有发生。

请帮助<3

标签: javasocketsnetworkingserverjava-io

解决方案


推荐阅读