【发布时间】:2017-10-21 09:22:54
【问题描述】:
我用 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 个带框的问号。不幸的是,我不知道如何更好地描述它们。
现在出现了几个问题:为什么我会收到这个字符串?我希望程序能够顺利运行,无一例外,只看到数字。
如果可能,这个字符串是什么?它实际上是什么?
第三个相关问题:我怎样才能顺利解决这个问题?
【问题讨论】:
标签: java sockets tcp tcpclient tcpserver