簡體   English   中英

Java DataStreams和套接字

[英]Java DataStreams and Sockets

我正在使用使用套接字的.net庫使用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;

先感謝您。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM