[英]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.