2017-05-02 60 views
0

我編碼使用.NET庫使用套接字在Java中的分佈式應用程序,我有與服務器和客戶端的麻煩。Java的數據流和套接字

這是一個非常具體的情況。我有一個讀取字符串(機場代碼)並返回機場數據的方法。 首先,我寫操作的代碼和參數在一個DataInputStream,然後我把它發送到服務器。在服務器上,我得到參數並調用方法。 這是問題;如果找不到機場,該方法可以返回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

'返回薩利達; sock.close();' - 這個不能編譯。 'sock.close()'是一個無法訪問的語句,編譯器會抱怨它。 –

+0

@MCEmperor對不起,我在旅途中改編了它,現在修正了它,我還在客戶端部分添加了sock.close()(如果值爲null) – Setekorrales

回答

1

您需要發送回一個成功/失敗的代碼,並且只在發送成功的情況下,接下來的名稱。