0

DataOutputStreamサーバーへのバイトストリームの送受信に使用しています。最初に、重要なコード部分について説明してから、質問をします。

次のような send メソッドがあります。

protected static void sendMessage (Socket socket, byte[] b)  throws IOException
{
   BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream(), 2048);
   DataOutputStream serverOut = new DataOutputStream(bos);

   serverOut.write(b, 0, b.length);
   serverOut.flush();
}

上記のメソッドを使用して、インスタンスごとにサーバーにメッセージを送信しDataOutputStreamます。注:Socketインスタンスは前に初期化され、引数としてこのメ​​ソッドに送信されます。

さらにreceive、次のような方法があります。

protected static void receive (Socket socket, byte[] b) throws IOException
{ 
   BufferedInputStream bis = new BufferedInputStream (socket.getInputStream ());
   DataInputStream serverIn = new DataInputStream (bis);

   serverIn.readFully(b, 0, b.length);
}

最後のステップで、mainメソッドを表示します:

public static void main(String[] args)
{
    ServerSocketFactory socket_factory = ServerSocketFactory.getDefault();
    InetAddress host =  InetAddress.getByName("192.168.20.33");
    ServerSocket server_socket = socket_factory.createServerSocket(1111,3,host);
    Socket socket = server_socket.accept();
    System.out.println(socket.isConnected());

    byte[] request = new byte[]{48,48,48};
    send(socket, request);

    byte[] response = new byte[10];
    receive(socket,response);
}

通常の状況ではすべて問題ありませんが、私の質問は次のとおりです。socket.isConnected()ステートメントsendメソッドによるテスト接続後にサーバーがダウンすると、例外はスローされませんが、メソッドを呼び出すreceiveと、接続されていないホストの例外がスローされます。sendサーバーが失敗したときに例外をスローしないがreceive、接続が失われたときに例外をスローするメソッドはどれですか? また、writeメソッド同様のreadFullyメソッドで接続を確認する方法はありますか? サンプルでは例外がスローされますか?

(間違った用語や文法を使用している場合は申し訳ありません。私は英語を学んでいます。)

4

3 に答える 3

2

このisConnected()メソッドは、接続の活性については何も伝えず、ソケットある時点で接続されていたことだけを伝えます。

切断された接続の処理の詳細については、この回答を確認してください。

于 2012-07-02T12:39:42.897 に答える
1

jtahlborn と Recursed による正解に加えて、あなたのメッセージはおそらくまだ JVM から出ていません。DataOutputStreamあなたはラップアラウンドに書いていBufferedOutputStream.ますあなたが呼び出すまで何も起こりませんDataOutputStream.flush().

于 2012-07-03T01:13:58.090 に答える
1

メッセージを送信するとき、ソフトウェアは宛先がメッセージを受信したかどうかを認識しません。メッセージを任意の場所に送信でき、エラーや例外が発生することはありません。ただし、メッセージを受信すると、ソフトウェアはメッセージを予期していることを完全に認識しており、予期したとおりにメッセージを受信しない場合は警告を発します。

メッセージを送信する前に相手側に何かがあることを確認したい場合は、宛先に ping を送信してソフトウェアを変更し、送信前に相手側に何かが接続されていることを確認できます。

于 2012-07-02T12:40:29.313 に答える