Как преобразовать байты в mp3 и как отправить данные по UDP - PullRequest
0 голосов
/ 26 апреля 2019

1) Я могу ввести и отправить имя файла с моего клиента на мой сервер.но как только он достигает моего сервера, я не могу получить доступ к файлу, даже если местоположение и имя файла указаны правильно.2) так как я ограничен 1500 байтами на передачу, я должен отправлять свои данные небольшими 1500 байтовыми пакетами.но я сталкиваюсь с проблемами при отправке данных размером более 1500 байт.Это также может быть потому, что я использую массив байтов.3) Я не могу преобразовать прочитанный мною mp3-файл и преобразовать его в байты обратно в mp3-файл

Я пытался использовать другие файлы, чтобы проверить, не ошибся ли я, но не важно, какой это файл.Я использую результат всегда один и тот же.

import java.io.*;
import java.net.*;
import java.util.*;
class UDPClientThreads {
 public static void main(String args[]) throws Exception
 { 
   String ul;

   Scanner cin = new Scanner(System.in);

   System.out.print("Enter uname: ");
   ul = cin.nextLine();

   long tstart = System.currentTimeMillis();

   DatagramSocket clientSocket=new DatagramSocket();
   InetAddress IPAddress=InetAddress.getByName("localhost");

    byte[] sendData=new byte[1500];
    byte[] receiveData=new byte[1500];

    System.out.println("sent: "+ul);
    sendData=ul.getBytes();
    DatagramPacket sendPacket=
     new DatagramPacket(sendData, sendData.length,IPAddress, 12313);
    clientSocket.send(sendPacket);
    DatagramPacket receivePacket=
     new DatagramPacket(receiveData, receiveData.length);
    clientSocket.receive(receivePacket);

    System.out.println(receivePacket.getData().length);

   clientSocket.close();   
 }
}
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.file.Files;
public class UDPServerThreads {

  public class UDPClientHandler1 implements Runnable {

   byte[] bytesFromFile;
   InetAddress address;
   int port;

   public UDPClientHandler1(byte[] bytesFromFile, InetAddress address, int port) {
    this.bytesFromFile=bytesFromFile;
    this.address=address;
    this.port=port;
   }

    public void run() {   
     byte[] sendData=new byte[1500];
     try{
      String threadName =
      Thread.currentThread().getName();
      String message="in HandleClient";

      long cstarttime = System.currentTimeMillis();
      System.out.println("before csocket");
      DatagramSocket csocket=new DatagramSocket();

      sendData= bytesFromFile;
      DatagramPacket sendPacket=
        new DatagramPacket(sendData, sendData.length, address, port);
      csocket.send(sendPacket);
      System.out.println("after send in thread "+"IPAddress="+address+" port="+port);
      long cendtime = System.currentTimeMillis();
      System.out.println("time="+(cendtime-cstarttime));
     }
     catch (IOException e) {}
    }
 }

  public void nonStatic(byte[] bytesFromFile, InetAddress address, int port) {
   Thread t = new Thread(new UDPClientHandler1(bytesFromFile,address,port));
     t.start();  
  }

 public static void main(String args[]) throws Exception
  {  
    UDPServerThreads udpserver= new UDPServerThreads();
    try {
     DatagramSocket serverSocket=new DatagramSocket(12313);
     byte[] receiveData=new byte[1500];
     int count=0;
     while(true)
     {
      DatagramPacket receivePacket=
       new DatagramPacket(receiveData, receiveData.length);
      serverSocket.receive(receivePacket);
      System.out.println("after rcv in server");
      String udpmessage=new String(receivePacket.getData());
      System.out.println("sentence"+udpmessage);

       try
    {
      File f = new File(udpmessage);
      byte[] bytesFromFile = Files.readAllBytes(f.toPath());
      System.out.println(bytesFromFile.length);

      InetAddress address=receivePacket.getAddress();
      int port=receivePacket.getPort();
      udpserver.nonStatic(bytesFromFile,address,port);
      count++;
      System.out.println("after start thread"+count);  
    }
    catch(Exception e)
    {
      System.out.println("not working");
    }

     }
   }
   catch (IOException e) {} 
 }
}

В конце я ожидаю, что мой сервер отправит mp3-файл моему клиенту, тогда мой клиент создаст mp3-файл, который можно открывать и воспроизводить.

...