2017-05-02 13 views
0

私はJavaで分散アプリケーションをコード化しています。.netライブラリを使用しており、サーバーとクライアントに問題があります。Javaデータストリームとソケット

非常に具体的なケースです。私は文字列(空港コード)を読み取り、空港データを返すメソッドを持っています。 まず、操作のコードとパラメータをDataInputStreamに書き込み、それをサーバーに送信します。サーバー上で私はparametresを取得し、メソッドを呼び出します。 ここに問題があります。空港が見つからない場合、メソッドはnullを返すことができます。 ヌル値をクライアントに送り返すにはどうすればよいですか?

私が試してみました:

If the value is null 
then 
    inputStream.writeUtf("Null") 
    inputStream.flush() 
endif 

が、私はクライアントに値を読み取るしようとしたとき、時々私はここでEOFExceptionでは

を得たが、両方のコードの一部、最初のサーバーの一部です:

case com.codAeropuerto: //aeropuerto(codigo : String): DatoAeropuerto 

    String codigoAeropuerto = InStr.readUTF(); 

    DatoAeropuerto aeropuerto = espacioAereo.aeropuerto(codigoAeropuerto); 

    if(aeropuerto==null){ //if the value returned is null 
      OutStr.writeUTF("NULL"); 
      OutStr.flush(); 
    } else { 
      OutStr.writeDouble(aeropuerto.coordX); 
      OutStr.writeDouble(aeropuerto.coordY); 
      OutStr.writeDouble(aeropuerto.coordZ); 
      OutStr.flush(); 
    } 

とクライアント部分:

try { 
     sock=new Socket(server_dir,puerto_server); 

     //send petition to server 
     DataOutputStream outstr = new DataOutputStream(sock.getOutputStream()); 
     outstr.writeByte(com.codAeropuerto); 
     outstr.writeUTF(codigo); 
     outstr.flush(); 

     //return information 
     DataInputStream instr = new DataInputStream(sock.getInputStream()); 

     if(instr.readUTF().equals("NULL")){ 
      sock.close() 
      return salida; 
     } 

     double coordX = instr.readDouble(); 
     double coordY = instr.readDouble(); 
     double coordZ = instr.readDouble(); 

     salida = new DatoAeropuerto(coordX,coordY,coordZ); 
     sock.close(); 


    } catch (IOException e) { 
     System.out.println("Error EspacioAereo_Proxy aeropuerto : socket no se ha podido cerrar"); 

    } return salida; 

ありがとうございます。

+1

'return salida; sock.close(); ' - これはコンパイルされません。 'sock.close()'は到達不能な文であり、コンパイラは文句を言うでしょう。 –

+0

@MCEmperor申し訳ありませんが、私は外出先でそれを修正しました。クライアントの部分にsock.close()を追加しました(値がnullの場合) – Setekorrales

答えて

1

成功/失敗コードを送り返し、成功の場合にのみ次の名前を送信する必要があります。