- - PR -
TCPヘッダを取得する方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-03-11 13:23
みなさんこんにちわ。
JavaでTCPヘッダ(の中のコントロールビット)を取得する方法がありましたらご教授ください。 | ||||
|
投稿日時: 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-14 18:11
やはりJNIしか手が無いようですね。
Javaのソケット通信では相手ソケットが閉じたかどうかわかりませんよね? こちらから何かを送信してIOExceptionなりをキャッチするしか方法が無さそうなので コントロールビットのFINでも取れればと思ったんですが・・・。 お手数おかけしました。 | ||||
|
投稿日時: 2005-03-14 19:55
ちょっと気になりまして。
Java以外なら分かるんでしょうか? 相手がいきなり落ちたりしているのを検出(?)するのでしたら、タイムアウトとかしかないと思うんですけど? | ||||
|
投稿日時: 2005-03-15 10:30
Javaの場合、InputStreamのread()ではストリームの終端に達した場合に
-1を返しますがこれは相手ソケットが閉じてるかどうかとは無関係ですよね。 Cの read(sock,buf,sizeof(buf)); なんかですとFINを受け取っていると0を返すじゃないですか。 これで相手がclose処理を行ったと判断できると思うんです。 | ||||
|
投稿日時: 2005-03-15 11:15
SocketInputStreamは、通常相手ソケットのクローズ以外で-1を返すことは
無いのでは。ほかにありましたっけ? | ||||
|
投稿日時: 2005-03-15 11:36
とりあえず貼っとくよ。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16472&forum=12 | ||||
|
投稿日時: 2005-03-15 11:47
試してみました。 確かに相手がクローズする以外-1になりませんでした。 どうも勘違いしていたようです。 お騒がせしました。 みなさんありがとうございました。 |