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