所以我的代码应该将float发送到服务器并从中接收整数。但事实并非如此。显然有一些flush方法的问题,似乎数据不会发送到服务器。在我的代码中,socket.output()/ input()和_output / _input返回包装到DataStreams中的CipherStreams以建立连接。 safeInstance方法建立连接并创建密码。客户端中的OuputStream和服务器中的InputStream包含一个int(0)和UTF字符串,其中包含客户端十六进制版本的公钥。密钥是完全相同的。是否有一些解决方案在发送数据后没有关闭流(或者在关闭后更新它的方法)?密码使用AES。
在客户端,我们有
try {
UtilDHSocket socket = UtilDHSocket.safeInstance(0);
socket.output().writeFloat(1.0F);
socket.output().flush();
int answer = socket.input().readInt();
socket.input().close();
socket.output().close();
socket.close();
return answer == 200;
} catch(Exception ex) {
error(ex);
return false;
}
在服务器端有类似的东西
try {
float clientVersion = _input.readFloat();
if(clientVersion == Main._version) {
_output.writeInt(200);
} else {
_output.writeInt(418);
}
_output.flush();
_input.close();
_output.close();
_client.close();
} catch(Exception ex) {
warning("Unable to process packet form ",this._client.getInetAddress().getHostAddress());
debug(ex);
}
答案 0 :(得分:0)
关闭套接字的输入流或输出流会关闭另一个流和套接字。因此,您有两个冗余关闭。删除输入流和套接字的闭包。然后关闭输出流可以完成它对流所需要做的事情。