- PR -

TCPヘッダを取得する方法

投稿者投稿内容
ぎょえん
会議室デビュー日: 2005/03/11
投稿数: 4
投稿日時: 2005-03-11 13:23
みなさんこんにちわ。

JavaでTCPヘッダ(の中のコントロールビット)を取得する方法がありましたらご教授ください。
a-san
常連さん
会議室デビュー日: 2004/03/15
投稿数: 30
投稿日時: 2005-03-12 09:06
Javaはソケット通信はサポートしていますが、
TCPヘッダを取得しようとしたら、もうひとつ下の層のAPIが必要です。
標準のJavaにはない(はず)なのでムリです。
それに対応したライブラリを探すか、自分でJNIで作るしかないでしょう。
探したら、こんなのを見つけました。
http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html
http://sourceforge.net/projects/jpcap/
ぎょえん
会議室デビュー日: 2005/03/11
投稿数: 4
投稿日時: 2005-03-14 18:11
やはりJNIしか手が無いようですね。

Javaのソケット通信では相手ソケットが閉じたかどうかわかりませんよね?
こちらから何かを送信してIOExceptionなりをキャッチするしか方法が無さそうなので
コントロールビットのFINでも取れればと思ったんですが・・・。

お手数おかけしました。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2005-03-14 19:55
ちょっと気になりまして。

引用:

Javaのソケット通信では相手ソケットが閉じたかどうかわかりませんよね?


Java以外なら分かるんでしょうか?

相手がいきなり落ちたりしているのを検出(?)するのでしたら、タイムアウトとかしかないと思うんですけど?

ぎょえん
会議室デビュー日: 2005/03/11
投稿数: 4
投稿日時: 2005-03-15 10:30
Javaの場合、InputStreamのread()ではストリームの終端に達した場合に
-1を返しますがこれは相手ソケットが閉じてるかどうかとは無関係ですよね。

Cの read(sock,buf,sizeof(buf));
なんかですとFINを受け取っていると0を返すじゃないですか。
これで相手がclose処理を行ったと判断できると思うんです。

シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-03-15 11:15
SocketInputStreamは、通常相手ソケットのクローズ以外で-1を返すことは
無いのでは。ほかにありましたっけ?
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-03-15 11:36
とりあえず貼っとくよ。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16472&forum=12
ぎょえん
会議室デビュー日: 2005/03/11
投稿数: 4
投稿日時: 2005-03-15 11:47
引用:

シュンさんの書き込み (2005-03-15 11:15) より:
SocketInputStreamは、通常相手ソケットのクローズ以外で-1を返すことは
無いのでは。ほかにありましたっけ?




試してみました。
確かに相手がクローズする以外-1になりませんでした。
どうも勘違いしていたようです。
お騒がせしました。

みなさんありがとうございました。

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