我使用 .net 库使用套接字编写分布式应用程序,并且我在服务器和客户端遇到问题。
这是一个非常具体的案例。我有一个读取字符串(机场代码)并返回机场数据的方法。 首先,我在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;
提前谢谢。
答案 0 :(得分:1)
您需要发回成功/失败代码,并且仅在成功案例中发送下一个名称。