5

私の目標は、リモート マシンでソケットをテストするために、空のデータ フィールドを持つ TCP パケットを送信することです。

OutputStream クラスの write(byte[] b) メソッドを使用しています。私の試み:

outClient = ClientSocket.getOutputStream();
outClient.write(("").getBytes());

そうすることで、パケットがネットワーク上に現れることはありません。"" を " " またはゼロ以外の文字列に置き換えると、問題なく動作します。

私はjpcapを試しましたが、うまくいきませんでした。OutputStream クラスを拡張し、独自の OutputStream.write メソッドを実装することを考えました。しかし、これは私の知識を超えています。誰かがすでにそのようなことをしている場合、私にアドバイスをお願いします。

4

2 に答える 2

3

サイレントに切断された接続をすばやく検出したい場合は、 を使用できますSocket.setKeepAlive( true )。このメソッドは、TCP/IP に、データ パケットやアプリケーション プログラミングなしでハートビート プローブを処理するように要求します。ただし、ハートビートの頻度をさらに制御したい場合は、アプリケーション レベルのパケットでハートビートを実装する必要があります。

詳細については、こちらをご覧ください: http://mindprod.com/jgloss/socket.html#DISCONNECT

于 2012-05-21T23:12:25.113 に答える
-2

TCPパケットのようなものがないので、空のTCPパケットのようなものはありません。TCPはバイトストリームプロトコルです。ゼロバイトを送信しても、何も起こりません。

2時間後にのみ役立つキープアライブを除いて、切断された接続を検出するには、読み取りタイムアウトと書き込み例外に依存する必要があります。

于 2012-05-22T01:17:37.053 に答える