gpt4 book ai didi

java - 关于使用 UDP 从客户端上传 mp3 文件到服务器

转载 作者:行者123 更新时间:2023-12-01 16:35:48 25 4
gpt4 key购买 nike

我对 StackOverflow 还很陌生,如果我的问题提出不当或令人困惑,请告诉我,谢谢!

我正在开发一个音频流项目,其中允许客户端将其 mp3 文件上传到服务器。服务器将它们存储到播放列表中并将歌曲流回所有客户端。这是我的客户端上传 mp3 的代码:

    public static void sendPackets(){
System.out.println("Sending test file...");
try{
while (active){
//The song needs to be uploaded;
File file = new File("Sorrow.mp3")
FileInputStream fis = new FileInputStream(file);
byte[] byteStream = new byte[(int) file.length()];
//Trying to convert mp3 to byteStream
fis.close();
InetAddress destination = InetAddress.getByName("localhost");
DatagramPacket sendingAirMail = new DatagramPacket(byteStream, byteStream.length, destination, 50010); // 50010 is the listening port
serverSocket.send(sendingAirMail); // sending the entire bytestream via UDP
// ServerSocket is a DatagramSocket
break;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

问题出在这里:

serverSocket.send(sendingAirMail);

因为它会给我这个错误:

java.net.SocketException: The message is larger than the maximum supported by the underlying transport: Datagram send failed
at java.base/java.net.DualStackPlainDatagramSocketImpl.socketSend(Native Method)
at java.base/java.net.DualStackPlainDatagramSocketImpl.send(DualStackPlainDatagramSocketImpl.java:136)
at java.base/java.net.DatagramSocket.send(DatagramSocket.java:695)
at client.sendPackets(client.java:116)
at client$2.run(client.java:67)

查了google才知道是因为UDP发送的每个包有大小限制,所以我想知道这种情况下如何正确分离UDP包?我知道在这种情况下 TCP 会更好,但我认为无论如何我都需要学习如何分离包,因为我需要使用 UDP 从服务器流回字节数组。任何帮助将不胜感激!

如果需要,我可以发布我的服务器和其他客户端信息。

最佳答案

问题是您需要将文件切成几 block 并交付它们。对于 UDP,您需要一些东西来确保文件完整且正确。以下是一些建议:

首先,您需要剪切文件,因此您需要在头部给出一个 seq 标志。此外,您可能还需要一些额外的信息,例如文件的整体大小、时间戳等。

struct msg {
int seq;
int total_seq;
int size;
void *data;
};

然后,最好建立一个发送缓冲区和接收缓冲区,每次检查缓冲区是否为空,如果不为空,则发送/接收。

收到一些片段后,您需要使用 seq 标志重建它们。当某些seq丢失时,需要重传。所以这里需要进行重传设计。

总而言之,你至少需要以下东西:

  1. 信息之前的用户定义头
  2. 剪切/重建文件
  3. 重传(GBN 或 FEC 或两者)

希望能帮到你。

关于java - 关于使用 UDP 从客户端上传 mp3 文件到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61951065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com