Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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 ServerSocket如何接收多个文件_Java_Java 8_Serversocket - Fatal编程技术网

Java ServerSocket如何接收多个文件

Java ServerSocket如何接收多个文件,java,java-8,serversocket,Java,Java 8,Serversocket,我有一个研究项目。我的老师不想告诉我如何解决接收多个文件的问题。我知道我需要使用函数getInputStream(),但我不知道如何在这个inputStream对象中拆分这些文件。我需要拆分此输入流,因为我需要将每个文件保存在文件夹中 感谢您的帮助和向我解释这个问题。答案是您可能需要HTTP或FTP之类的传输协议。但是,如果您不想要那么高级别的东西,那么您可以做的是tar,然后gzip您的文件,这是当年人们在unix上所做的。Tar基本上仍然是一种传输协议,但可能没有HTTP或FTP那么重要。听

我有一个研究项目。我的老师不想告诉我如何解决接收多个文件的问题。我知道我需要使用函数getInputStream(),但我不知道如何在这个inputStream对象中拆分这些文件。我需要拆分此输入流,因为我需要将每个文件保存在文件夹中


感谢您的帮助和向我解释这个问题。

答案是您可能需要HTTP或FTP之类的传输协议。但是,如果您不想要那么高级别的东西,那么您可以做的是tar,然后gzip您的文件,这是当年人们在unix上所做的。Tar基本上仍然是一种传输协议,但可能没有HTTP或FTP那么重要。听起来你的讲师希望你创建一个协议。您需要协议的原因是,如果您通过同一个套接字发送多个文件,您将无法知道一个文件何时停止,另一个文件何时开始。为了简化这个问题,我将使用一个简单的聊天应用程序作为示例,但同样的情况也适用于文件

假设您有一个聊天应用程序,它只有2个用户(一个服务器到客户端)。每个用户都可以发送任意长度的消息。假设User1想向User2发送以下消息(每行一条消息)

如果您通过套接字发送这些原始消息,您可能会收到
你好,用户今天好吗?
。现在,您如何知道一条消息从何处开始,另一条消息从何处停止

简单的解决方案是在每条消息之前发送一些东西,说明即将到来的消息中的字符长度,这样您的消息可能会

11Hello User24How are you doing today?
因此,最终用户知道我读取了一个int,它告诉我
,然后读取
字符以获得完整的消息


这是一个很基本的例子,但不是很好。让我们看看我在视频游戏中看到的一种简单的数据包格式:

Field Name   Field Type   Notes
Length       VarInt       Length of packet data + length of the packet ID
Packet ID    VarInt 
Data         Byte Array   Depends on the connection state and packet ID, see the sections below
这是客户端和服务器之间所有信息使用的基本格式。要读取的数据长度,数据包类型,后跟该数据包类型的数据


对于您的用例,您可能需要类似的东西,关于您发送的字节的某种元数据。例如:文件长度、文件名


首先,我将查看该类,以便轻松读取基本数据类型。

我通过ServerSocket@MateuszSobczak好的,那么您要么需要使用现有的Servlet框架和ApacheTomcat,要么自己解析HTTP请求。我不能使用tomact。我只能使用javaobjects@MateuszSobczak那么我已经给了你我所能给予的一切帮助。老实说,这个项目/任务要求你重新发明轮子,这不是一个有成效的学习练习
Field Name   Field Type   Notes
Length       VarInt       Length of packet data + length of the packet ID
Packet ID    VarInt 
Data         Byte Array   Depends on the connection state and packet ID, see the sections below