所以我的代码应该发送浮点到服务器并从它接收整数。但事实并非如此。显然,刷新方法有问题,似乎数据没有到服务器。在我的代码中,socket.output()/input()和_output/_input返回封装为已建立连接的数据流的密码流。建立连接和创建密码的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);
}
关闭一个套接字的输入流或输出流将关闭另一个流和套接字。因此有两个冗余的闭合。移除输入流和套接字的闭包。然后,输出流的闭包就可以对流做它需要做的事情。