Я написал TCPClient на Java, который отправляет целые числа на 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 вопросительных знаков в рамке. К сожалению, я не знаю, как лучше их описать. Теперь возникает несколько вопросов: Почему я получаю эту строку? Я ожидаю, что программа будет работать гладко, без каких-либо исключений, видя только числа. Если можно, что это за строка? Что это на самом деле?
Третий связанный с этим вопрос: как я могу плавно исправить это?