Java客户端/服务器套接字问题

时间:2016-04-21 15:17:08

标签: java sockets network-programming

我正在学习Java套接字编程,我非常肯定我的代码是正确的,但由于某种原因,服务器和客户端不通信。我不太确定他们是否连接。这是我到目前为止所做的。

服务器:

public static void main(String[] args) throws Exception
{
    Main_Server server = new Main_Server();
    server.run();
}

public void run() throws Exception
{
    ServerSocket server = new ServerSocket(444); //Port
    Socket sSocket = server.accept();

    BufferedReader bfr = new BufferedReader(new InputStreamReader(sSocket.getInputStream()));

    String clientMessage = bfr.readLine();
    System.out.println("Client: "+clientMessage);

    if (clientMessage != null)
    {
        PrintStream ps = new PrintStream(sSocket.getOutputStream());
        ps.println("Message Received.");
    }
}

客户端:

public static void main(String[] args) throws Exception
{
    Client_One client = new Client_One();
    client.run();
}

public void run() throws Exception
{
    Socket clientSocket = new Socket("localhost", 444);

    PrintStream ps = new PrintStream(clientSocket.getOutputStream());
    ps.println("Hello, server.");

    BufferedReader bfr = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    String serverMessage = bfr.readLine();
    System.out.println("Server: "+serverMessage);
}

所以我先运行服务器,然后运行客户端(我目前正在使用NetBeans IDE 8.1)。程序运行并且只是坐在那里,但之后没有任何事情发生。为什么是这样?我只有两个空的控制台。 谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

如果使用缓冲区,则需要flushclose,否则如果缓冲区未满,则数据仍保留在缓冲区中。也可以关闭它,因为正如你从javadoc中看到的那样,关闭一个流也会刷新它。

从OutputStream的javadoc,您可以看到刷新的含义:

  

刷新此输出流,强制写出所有缓冲的输出字节

注意:另外请记住在完成使用它们时关闭输入和输出流,否则您仍然没有使用内存正确关闭资源。