0
我有下面的代碼片段:的ServerSocket接受的行爲
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!");
此代碼是在一個可運行的run()
方法運行,當該文件已被轉移,它應該停止所有的通信。
好奇的是,它不是一個循環。代碼確實接受,不會產生文件傳輸,但我不明白爲什麼HELLO1再次出現在我的屏幕上。因此,第二次嘗試再次運行此代碼時,會給我「連接被拒絕」。
「10」是我的破解版,但原始代碼從未使用過積壓。
有什麼建議嗎?
運行執行以前的代碼是:
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!
爲什麼它作爲代碼失敗,但接受傳入的請求?
好的,我找到了錯誤的確切點。它是在線程之後。在t.start()之後;我在這裏做的事情是:「Socket sock = new Socket(」distantmaching「,63456);代碼恰好在那裏,在線程之後,根據理論,我應該設置服務器線程並且客戶端與小的片段,對嗎?看來它不起作用。 – hephestos 2011-01-17 12:44:40
windows windows:沒問題.Windows-Linux作爲服務器接受連接,失敗。 – hephestos 2011-01-17 14:20:41