Java 接收从服务器到android的UDP数据包

Java 接收从服务器到android的UDP数据包,java,android,udp,webserver,audio-streaming,Java,Android,Udp,Webserver,Audio Streaming,所以我正在创建一个流媒体应用程序。将有两个客户端(android设备)和一个服务器(java服务器)。现在客户端1(安卓A)正在使用我自己测试过的DataGramSocket向服务器发送音频数据包,一切正常。但现在的问题是,我不知道如何将音频数据包从服务器发送到客户端2(Android B),以便播放。我试过几种方法,但都没有用。我知道我可以直接将音频包从安卓A发送到安卓B,但我不想这样做,因为这不是必需的流 Server.java: import java.io.ByteArrayInputS

所以我正在创建一个流媒体应用程序。将有两个客户端(android设备)和一个服务器(java服务器)。现在客户端1(安卓A)正在使用我自己测试过的
DataGramSocket
向服务器发送音频数据包,一切正常。但现在的问题是,我不知道如何将音频数据包从服务器发送到客户端2(Android B),以便播放。我试过几种方法,但都没有用。我知道我可以直接将音频包从安卓A发送到安卓B,但我不想这样做,因为这不是必需的流

Server.java:

import java.io.ByteArrayInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.SourceDataLine;

public class Server {

    AudioInputStream audioInputStream;
    static AudioInputStream ais;
    static AudioFormat format;
    static boolean status = true;
    static int port = 50005;
    static int cport = 50005;
    static int sampleRate = 16000;
    static int buffSize = 1280;

    static InetAddress client_dest;
    static DatagramSocket clientsocket;

    public static void main(String args[]) throws Exception {


        System.out.println("Server started...");

        DatagramSocket serverSocket = new DatagramSocket(port);
        clientsocket = new DatagramSocket();
        
        client_dest = InetAddress.getByName("10.90.79.50");


        byte[] receiveData = new byte[1280]; 
        // ( 1280 for 16 000Hz and 3584 for 44 100Hz (use AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat) to get the correct size)

/*
         AudioFormat(float sampleRate,
           int sampleSizeInBits,
           int channels,
           boolean signed,
           boolean bigEndian)*/
        format = new AudioFormat(sampleRate, 16, 1, true, false);

        while (status == true) {
            DatagramPacket receivePacket = new DatagramPacket(receiveData,
                    receiveData.length);

            serverSocket.receive(receivePacket);

            ByteArrayInputStream baiss = new ByteArrayInputStream(
                    receivePacket.getData());

            ais = new AudioInputStream(baiss, format, receivePacket.getLength());

            // A thread solve the problem of chunky audio 
            new Thread(new Runnable() {
                @Override
                public void run() {
                    stream(receivePacket.getData());
                    // toSpeaker(receivePacket.getData());
                }
            }).start();
        }
    }

    public static void toSpeaker(byte soundbytes[]) {
        try {

            DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format);
            SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);

            sourceDataLine.open(format);

            FloatControl volumeControl = (FloatControl) sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN);
            volumeControl.setValue(volumeControl.getMaximum());

            sourceDataLine.start();
            sourceDataLine.open(format);

            sourceDataLine.start();

            System.out.println("format? :" + sourceDataLine.getFormat());

            sourceDataLine.write(soundbytes, 0, soundbytes.length);
            // System.out.println(soundbytes.toString());
            sourceDataLine.drain();
            sourceDataLine.close();
        } catch (Exception e) {
            System.out.println("Not working in speakers...");
            e.printStackTrace();
        }
    }

    public static void stream(byte soundbytes[]) {
        try {
            DatagramPacket packet;

            //putting soundbytes in the packet
            packet = new DatagramPacket (soundbytes,soundbytes.length,client_dest,cport);

            clientsocket.send(packet);

            System.out.println(packet.toString());

        }  catch (Exception e) {
            e.printStackTrace();
            System.out.println("IOException");
        }
    }
}
我正在使用
stream()
函数将数据包从服务器发送回客户端2(Android B),但我不知道我的(Android B)如何从服务器接收数据包,或者我犯了一个错误。我正在使用
DataGramSocket
接收数据包。因此,如果有其他选择,我准备尝试一下

注意:我正在本地测试它。java服务器在我的网络上,它成功地从客户端1接收音频数据包,但主要问题是我无法将这些数据包发送回客户端2(Android B)