如果这是一个愚蠢的问题,我真的很抱歉,我只需要别人的观点。我有这个代码,我在其中打印到客户端的输出流到服务器。出于某种原因,for循环每次循环时都不会向i添加1。每当我运行它,我得到:
i
但它只打印两次。每当我在客户端输入内容时,for循环再次运行,""
为1.所以我从中得到的是for循环等待if循环运行完毕直到它再次运行。但情况并非如此,因为它只应检查重启是否等于while (true) {
restart = clientIn;
if (!restart.equals("")) {
break;
}
int j = 0;
try {
for (int i = 0; i < maxClientsCount; i++) {
System.out.println("threads[i]: " + threads[i] + "threads[i].clientName: "
+ threads[i].clientName + "maxClientsCount: " + maxClientsCount + "i: " + i);
if (threads[i] != null && threads[i].clientName != null) {
j = i + 1;
System.out.println(threads[i].is.readLine());
}
}
} catch (IOException e) {
e.printStackTrace();
break;
}
}
System.out.println("broke");
,然后继续进行for循环。如果有人已经提出这个问题,我已提前抱歉,我已经尝试过寻找这个问题,但没有成功。您应该记住的一个细节是,在客户关闭窗口之前,捕获并不会捕获任何内容。
以下是代码:
$_SERVER['REQUEST_URI']
答案 0 :(得分:1)
所以我认为我在你的代码中发现了问题,你每次都在阅读客户端输入并在每次用户输入内容时触发for循环但是在while之后的第一行你的if子句是错误的,你'如果用户输入“”之外的任何内容,请重新打开while循环:
if (!restart.equals("")) {
break;
}
如果用户输入的内容如下,则应该打破循环:
if (restart.equals("")) {
break;
}
请从您身边测试并告诉它是否有效。
答案 1 :(得分:1)
在捕获IOException之后尝试捕获throwable。您可能无法获得IOException。您也可以登录该catch块并在需要时再次抛出throwable
您正在为&#39; threads [i] .clientName&#39;打印一个值。但然后检查线程[i]&#39;是null,所以这里可能会出现空指针异常吗?
编辑: 要捕获throwable,只需将其添加到代码中:
...
} catch (IOException e) {
e.printStackTrace();
break;
} catch (Throwable t) {
System.out.println("I have some other problem: " + t.getMessage());
t.printStackTrace();
break;
}
}
System.out.println("broke");
答案 2 :(得分:0)
我怀疑maxClientsCount等于1,因此for循环只执行一次。 While循环永远不会设置为false,因此它会继续执行for循环,使其看起来没有递增。
答案 3 :(得分:0)
基本上,我有两个客户端连接到服务器,这就是syso打印出两行的原因。一旦我意识到这两个客户端连接到服务器,我意识到我需要做的就是检查this
线程是否仍然连接,如下所示:
try {
for (int i = 0; i < maxClientsCount; i++) {
long startTime = System.currentTimeMillis();
if (threads[i] != null && threads[i] == this) {
while ((System.currentTimeMillis() - startTime) < 1000) {
if (threads[i].is.read() == -1) {
MyClientSocket.input("");
}
}
}
}
} catch (Exception e) {
break;
}
我包含MyClientSocket.input("");
的原因是因为我需要它来打破所有循环所以我只是将它发送到catch方法。我包括的另一件事是它检测你是否说是,否或未定义的方法,你可以在下面看到:
restart = clientIn;
if (restart.contains("yes")) {
run();
} else if (restart.contains("no")) {
break;
} else if (!restart.equals("")) {
for (int i = 0; i < maxClientsCount; i++) {
if (threads[i] != null && threads[i] == this) {
threads[i].os.println("Sorry I couldn't understand you. Please say yes or no.");
}
}
}
最后一个for循环只是将消息发送给连接到服务器的每个客户端。