- PR -

FTP転送(ServerSocket#accept)でフリーズ

1
投稿者投稿内容
かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 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();
}
}
*****************************************************************************
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-07-08 00:21
かつやさん、こんにちは。

accept でフリーズするというよりは、相手が connectして来ないのだと
思います。

たとえば、((serverDataSocket.getLocalPort())/255 って
256で割るのでは?

相手が正しいポート番号を認識できない為うまく行かないのでは
ないでしょうか?
かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 2004-07-08 10:59
Kissinger さん、ご返信ありがとうございます。

ご指摘のとおりでした。

256で割ると上手くいきました。

どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)