Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 套接字编程-密码流_Java_Sockets_Encryption - Fatal编程技术网

Java 套接字编程-密码流

Java 套接字编程-密码流,java,sockets,encryption,Java,Sockets,Encryption,我正在做文件传输(Socket-Java)程序,在这里我将文件的加密版本发送到客户端。客户端将对其解密并存储在其驱动器中 我使用CipherOutputStream和CipherIputStream进行加密和解密。我的问题是,在加密时,我需要关闭CipherOutputStream,否则该文件不会在客户端接收。在发送文件后,我需要从客户端接收确认,因为我关闭了服务器中的CipherOutputStream,它没有从客户端接收消息。它的抛出套接字关闭异常 是否有其他方法将加密格式的文件发送到客户端

我正在做文件传输(Socket-Java)程序,在这里我将文件的加密版本发送到客户端。客户端将对其解密并存储在其驱动器中

我使用CipherOutputStream和CipherIputStream进行加密和解密。我的问题是,在加密时,我需要关闭CipherOutputStream,否则该文件不会在客户端接收。在发送文件后,我需要从客户端接收确认,因为我关闭了服务器中的CipherOutputStream,它没有从客户端接收消息。它的抛出套接字关闭异常

是否有其他方法将加密格式的文件发送到客户端,以便客户端解密并将其存储在其存储库中


请提供一些建议。

一旦关闭流,您将无法发送回数据以确认成功接收文件


正如我在评论中所写的,您可以首先将文件的长度发送给客户端,以便客户端知道它必须读取多少字节。一旦客户端读取了这个数量的数据,客户端就可以发回确认,因为流没有关闭。一旦服务器收到确认,它就可以关闭流或启动另一次传输。

在发送文件内容之前,您可以发送其长度(之后要读取的字节数)。客户端将收到长度,并尝试读取该长度的字节。请注意,对称加密要求双方拥有相同的密钥。这是一个很难解决的问题,除非您对两个客户端都有物理控制。也许看看非对称加密?另外一个好处是在java中设置SSLSocket非常容易,但是我需要在收到确认之前发送加密文件。如果CipherOutputStream关闭,客户端将不会收到文件。@user3407267是,但您不需要关闭该流。别关上小溪。除非我关上小溪,否则它不会工作problem@user3407267为什么它不工作,除非你关闭流?你做了我建议的吗?问题是我需要发送整个文件。根据文件中的信息,客户端将发送一些其他信息作为确认。