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

时间:2014-06-16 19:01:34

标签: java sockets encryption outputstream

所以我的代码应该将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);
}

1 个答案:

答案 0 :(得分:0)

关闭套接字的输入流或输出流会关闭另一个流和套接字。因此,您有两个冗余关闭。删除输入流和套接字的闭包。然后关闭输出流可以完成它对流所需要做的事情。