Java中的TCP服务器和客户端

3

我尝试使用Java构建TCP服务器和客户端。它们可以连接,并且能够正常工作,但是我有一个错误。

以下是服务器端:

package com.company;
import java.io.*;
import java.net.*;

public class Main {

    public static void main (String[] args) throws IOException {

        System.out.println("The server is ready");
        ServerSocket serverSocket = new ServerSocket (1234);
        Socket clientSocket = serverSocket.accept ();

        BufferedReader in = new BufferedReader (new InputStreamReader (clientSocket.getInputStream ()));
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        String message, modifiedMessage;
        message = in.readLine ();
        System.out.print("The received message from client: " + message);
        modifiedMessage = message.toUpperCase();
        out.print(modifiedMessage);
        System.out.println ("\nModified message which is sent to client: " + modifiedMessage);
    }

}

服务器将需要接收来自客户端的消息,然后将其转换为大写字符串。
客户端方面是:
package com.company;
import java.io.*;
import java.net.*;

public class Main {

    public static void main(String[] args) throws IOException {

        Socket socket = new Socket("127.0.0.1", 1234);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        System.out.println("Enter a lowercase sentence: ");
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       BufferedReader in = new BufferedReader((new InputStreamReader(socket.getInputStream())));

        String messageSent = reader.readLine();
        System.out.println("The message sent is: " + messageSent);
        out.println(messageSent);


        String messageReceived = in.readLine();
        System.out.println("The modified message is: " + messageReceived);
    }
}

我希望客户端能够打印出小写句子和收到的(修改后)大写句子。问题在于,当我输入一个简单的单词,比如说hello,我的客户端只会打印原始字符串,而不是修改后的字符串。

服务器的输出为:

The received message from client: hello 
The modified message sent to the client is: HELLO

但是客户端的输出是:
The message sent is: hello 
The modified message is: null

我知道服务器能够将字符串转换为大写字母,并连接到我的客户端。那么为什么我的客户端没有打印接收到的消息呢?它实际上并没有接收到吗?

1个回答

1

你需要清除消息。PrintWriter在println中调用flush,而print不会。

在服务器端,你需要改为: out.println(modifiedMessage); 而不是 out.print(modifiedMessage);


除了刷新(这很重要!),println 还会发出客户端期望的行结尾;客户端调用 readLine 将等待直到看到行结尾。 - dnault

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