我在Java中编写了一个TCPClient,它将整数发送给TCPServer。我包括一个完整性检查,仅用于涵盖不是整数发送的情况,而是其他内容。如果一个发送整数,那么可以预期其他接收器整数。
但是在下面的代码中,似乎并非如此:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
class TCPClient {
public static void main(String argv[]) throws Exception {
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("localhost", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
int c = 0;
while (c < 1000000) {
System.out.println("Sent: " + c);
outToServer.write(c);
// Thread.sleep(1000);
c++;
}
clientSocket.close();
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
class TCPServer {
public static void main(String argv[]) throws Exception {
String reg = "\\d+";
int c = 0;
ServerSocket welcomeSocket = new ServerSocket(6789);
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
while (true) {
String s = inFromClient.readLine();
if (s.matches(reg) == false) {
throw new Exception(s + "is an invalid input! Expected one String of digits.");
}
int n = Integer.parseInt(s);
if (c + 1 != n) {
throw new Exception("Expected: " + (c + 1) + ", but got: " + n);
}
System.out.println("Received: " + c);
c++;
}
}
}
我收到的字符串总是8个盒装问号。不幸的是,我不知道如何更好地描述它们。
现在出现了一些问题:为什么我收到这个字符串?我希望程序能够顺利运行,没有例外,仅查看数字。
如果可能的话,这个字符串是什么?实际上是什么?
第三个相关问题:我如何顺利解决这个问题?
答案 0 :(得分:4)
您使用java.io.DataOutputStream
撰写int
,但不使用java.io.DataInputStream
来阅读它们。
您确实使用了用于从字符输入流中读取文本的java.io.BufferedReader
。这就是您以字符串表示形式接收数据的原因。
替换:
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
by:
DataInputStream outToServer = new DataInputStream (connectionSocket.getInputStream());
并使用DataInputStream#readInt()
方法阅读int
值。