我有以下代码片段:
if (servsock == null) {
System.out.println("HELLO1!");
servsock = new ServerSocket(63456, 10);
System.out.println("HELLO2!");
}
try {
System.out.println("HELLO3!");
sock = servsock.accept();
} catch (Exception ex) {
if (servsock != null && !servsock.isClosed()) {
System.out.println("PICO1!");
servsock.close();
}
if (servsock != null && servsock.isClosed()) {
System.out.println("PICO2!");
manager.log("SERVER SOCKET closed and nulled.");
servsock = null;
}
sock = servsock.accept();
}
System.out.println("HELLO4!");
is = sock.getInputStream();
System.out.println("HELLO5!");
bis = new BufferedInputStream(is);
System.out.println("HELLO6!");这段代码在runnable的run()方法中运行,当文件被传输后,它将停止所有通信。
奇怪的是,它不是一个循环。代码可以接受,可以进行文件传输,但我不明白为什么HELLO1又出现在我的屏幕上。因此,当我第二次尝试再次运行此代码时,我会看到“连接被拒绝”。
"10“是我的一个技巧,但是原始代码,也从来没有使用过backlog。
有什么建议吗?
执行前一个命令的代码如下:
final IClientInterface clientInterface = client.getClient();
final prgHolder = new ProgHolder();
Pong ftppong = new Pong();
ftppong.setFileNames(bout64.toByteArray());
ftppong.setDstFolder(dstFolder);
prgHolder.setName("pong");
prgHolder.setTask(pong);
Thread t = new Thread(new Runnable() {
public void run() {
try {
IClientInterface.execute(prgHolder);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
t.start();现在的确切问题是,当我到达新的ServerSocket(63456)命令时,客户端得到一个“连接被拒绝”,但远程PC中的程序是完全开放和广泛侦听的!"netstat“证实了这一点!
因此,我从另一个窗口重新运行(第二次)程序,传递所有HELLO消息并完成作业!
然后线程在远程PC中停止,并解绑端口63456!
为什么它作为代码失败,但接受传入的请求?
发布于 2011-01-15 00:22:09
根据这段代码,您应该只看到HELLO1一次。然而,这段代码的调用者很可能是在一个循环中,否则检查servsock的前一个值是没有意义的。
这会做什么呢?
servsock = null;
}
sock = servsock.accept();当你得到一个异常时,不要继续,就像它没有发生一样。
如果您想了解您的代码在做什么,我建议您使用调试器单步调试您的代码。
https://stackoverflow.com/questions/4693171
复制相似问题