TCP程序问题(Java)

6

有人可以帮我调试这个程序吗?

以下是服务器代码:

package networking;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

class TcpServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(5555);
        while (true) {
            Socket client = serverSocket.accept();
            Scanner reader = new Scanner(client.getInputStream());
            PrintWriter writer = new PrintWriter(client.getOutputStream());
            String inputString = reader.nextLine();
            System.out.println("Received from client : " + inputString);
            writer.write(inputString.toUpperCase());
            client.close();
        }
    }
}

这是客户端代码:

package networking;

import java.io.PrintWriter;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

class TcpClient {
    public static void main(String[] args) throws IOException {
        Socket client = new Socket("localhost", 5555);
        PrintWriter writer = new PrintWriter(client.getOutputStream());
        Scanner reader=new Scanner(client.getInputStream());
        writer.println("oPen SOurCe RUleS !");
        System.out.println("Received from server : "+reader.nextLine());
        client.close();
    }
}

问题在于当我运行这个程序时,客户端和服务器都进入了无限等待状态。有人能告译一下这段代码有什么问题吗?提前致谢!

1
这是正确的代码吗?……TcpClient 的导入似乎出了问题:没有导入 "PrintWriter",也没有使用 "DataOutputStream"。无论如何,我建议不要使用 PrintWriter,因为它不会抛出异常,你必须调用 "checkError" 来检查错误。在我看来,它只适合于记录日志。 - user85421
@Carlos:在PrintWriter的位置上我应该使用什么? - missingfaktor
1
我考虑了一下 OutputStreamWriter... 或者只是不要忘记在 PrintWriter 上使用 checkError - user85421
@Carlos:谢谢你的建议!我一定会记住的! :-) - missingfaktor
1个回答

7

您尝试过刷新 PrintWriter 吗?

您关闭了流,但从未通知写入程序您将要这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接