Java数据流和套接字

Java数据流和套接字,java,sockets,Java,Sockets,我正在用Java编写一个分布式应用程序,使用的是使用套接字的.net库,服务器和客户端都有问题 这是一个非常具体的案例。我有一个读取字符串(机场代码)并返回机场数据的方法。 首先,我在DataInputStream中编写操作代码和参数,然后将其发送到服务器。在服务器上,我获取参数并调用该方法。 问题就在这里;如果找不到机场,该方法可以返回null。 如何将空值发送回客户端 我试过: If the value is null then inputStream.writeUtf("Null

我正在用Java编写一个分布式应用程序,使用的是使用套接字的.net库,服务器和客户端都有问题

这是一个非常具体的案例。我有一个读取字符串(机场代码)并返回机场数据的方法。 首先,我在DataInputStream中编写操作代码和参数,然后将其发送到服务器。在服务器上,我获取参数并调用该方法。 问题就在这里;如果找不到机场,该方法可以返回null。 如何将空值发送回客户端

我试过:

If the value is null 
then 
   inputStream.writeUtf("Null")
   inputStream.flush()
endif
但当我试图读取客户机中的值时,有时会出现EOFEException

以下是代码的两部分,首先是服务器部分:

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;

提前谢谢。

您需要返回成功/失败代码,并且只在成功案例中发送下一个名称。

返回salida;sock.close()-此代码不可编译
sock.close()
是一个无法访问的语句,编译器会对此进行投诉。@很抱歉,我在运行中对其进行了修改,现已修复,并且我还在客户端部分添加了sock.close()(如果值为null)