- - PR -
FTP転送(ServerSocket#accept)でフリーズ
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-07-07 20:07
なぜか、初回だけ成功して次からは、ServerSocket#accept でフリーズしてしまいます。
で、また時間がたてば、初回だけ成功します。 原因不明です。 *************************************************************************** public Socket dataConnection(String ctrlCmd) throws SocketTimeoutException, Exception { // PORTコマンドで送るデータの格納用変数 String cmd = "PORT "; // データ転送用ソケット ServerSocket serverDataSocket = null; try { // 自アドレス byte[] selfAddress = InetAddress.getLocalHost().getAddress(); // 適当なポート番号のサーバソケットを生成 serverDataSocket = new ServerSocket(0); // ポートコマンド用の送信データを用意 for (int i=0; i<4; i++) { cmd = cmd + (selfAddress[i] & 0xff) + ","; } cmd = cmd + (((serverDataSocket.getLocalPort())/255) & 0xff) + "," + (serverDataSocket.getLocalPort() & 0xff); // PORTコマンドを制御用ストリームを通して送信 ctrlOutput.println(cmd); ctrlOutput.flush(); // 処理対象コマンドをサーバに送信 ctrlOutput.println(ctrlCmd); ctrlOutput.flush(); // サーバからの接続を受け付けます Socket dataSocket = serverDataSocket.accept(); ←ここで固まります。。。 return dataSocket; } catch (Exception e) { throw e; } finally { System.out.println("###### CLOSE ######"); serverDataSocket.close(); } } ***************************************************************************** |
|
投稿日時: 2004-07-08 00:21
かつやさん、こんにちは。
accept でフリーズするというよりは、相手が connectして来ないのだと 思います。 たとえば、((serverDataSocket.getLocalPort())/255 って 256で割るのでは? 相手が正しいポート番号を認識できない為うまく行かないのでは ないでしょうか? |
|
投稿日時: 2004-07-08 10:59
Kissinger さん、ご返信ありがとうございます。
ご指摘のとおりでした。 256で割ると上手くいきました。 どうもありがとうございました。 |
1
