它不会从服务器返回任何内容!

时间:2010-01-18 07:00:16

标签: java networking

我有两个重要的类(客户端和服务器),我将在我的文本区域写一些内容,通过单击发送按钮,我将调用客户端类的活动方法,我将该文本发送到我的客户端类,一切都还可以,文本也将打印在服务器控制台上,但是我无法从服务器到客户端回显该文本,请帮助我谢谢。

客户端类:(其中一部分)

 os = new PrintWriter(c.getOutputStream(), true);


 is = new BufferedReader(new InputStreamReader(c.getInputStream()));

 public static void active() {

 String teXt = MainClient.getText();

 os.println(teXt);

 String line = is.readLine();
        System.out.println("Text received: " + line);
        os.flush();
        is.close();
        is.close();
        c.close();

服务器类:(其中一部分)

      BufferedReader streamIn = new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintWriter streamOut =new PrintWriter(client.getOutputStream());
        boolean done = false;
        String line =null;
        while (!done ) {

            line = streamIn.readLine();
            if (line.equalsIgnoreCase("bye")) {
                done = true;
            } else {
                System.out.println(line);
                streamOut.println(line);
            }
        }

        streamIn.close();
        client.close();
        server.close();

4 个答案:

答案 0 :(得分:1)

在阅读服务器答案之前,您需要“os.flush();”。

因为根据您的客户端代码,您准备要使用

发送的文本
 String teXt = MainClient.getText();

 os.println(teXt);

然后等待服务器回答:

String line = is.readLine();
System.out.println("Text received: " + line);

然后将文本发送到服务器:

os.flush();

尝试:

String teXt = MainClient.getText();

os.println(teXt);
os.flush();
String line = is.readLine();
System.out.println("Text received: " + line);

答案 1 :(得分:1)

实际上Nettogrof的方式正确,但您还必须刷新服务器端:

        line = streamIn.readLine();
        if (line.equalsIgnoreCase("bye")) {
            done = true;
        } else {
            System.out.println(line);
            streamOut.println(line);
            streamOut.flush();    // or ...checkError();
        }

或者只是在autoFlush设置为true的情况下创建PrintWriter:

    PrintWriter streamOut = new PrintWriter(client.getOutputStream(), true);

一个注意事项:您还应该测试readLine()是否返回null,因为客户端将关闭连接而不发送“bye”。

第二个注意事项:PrintWriter的实例永远不会抛出IOExceptions,您应该测试调用checkError()的错误,这也会刷新流。

答案 2 :(得分:0)

输入流的读取频率是多少?从代码中看,似乎只有一次读取,可能在从服务器发送任何内容之前,就是这样。如果你打算使用你采用的方法,你可能需要对服务器进行更一致的轮询。

类似的东西:

while (line = is.readLine() != null ) {
    System.out.println("Text received: " + line);
}

答案 3 :(得分:0)

您的服务器代码实现错误,因为无限循环,streamIn,client和streamOut永远不会关闭。

请参阅medopal提到的文章以获得更多帮助。