我尝试使用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
我知道服务器能够将字符串转换为大写字母,并连接到我的客户端。那么为什么我的客户端没有打印接收到的消息呢?它实际上并没有接收到吗?
println
还会发出客户端期望的行结尾;客户端调用readLine
将等待直到看到行结尾。 - dnault