CipherOutputStream不会将数据刷新到套接字输出流



所以我的代码应该发送浮点到服务器并从它接收整数。但事实并非如此。显然,刷新方法有问题,似乎数据没有到服务器。在我的代码中,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);
}

关闭一个套接字的输入流或输出流将关闭另一个流和套接字。因此有两个冗余的闭合。移除输入流和套接字的闭包。然后,输出流的闭包就可以对流做它需要做的事情。

最新更新