Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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中的DatagramSocket、DatagramPack中_Java_Sockets_Datagram - Fatal编程技术网

将连续字节[]数据发送到java中的DatagramSocket、DatagramPack中

将连续字节[]数据发送到java中的DatagramSocket、DatagramPack中,java,sockets,datagram,Java,Sockets,Datagram,我正在制作一个java桌面应用程序,在这里我从麦克风录制语音,并在局域网中实时发送这些语音数据到另一个计算机系统,反之亦然 我能够通过麦克风录制声音,并将其输出到系统中的扬声器。现在使用UDP数据报套接字也要这样做,但UDPServer不接收数据流(字节[]) 代码如下:VUClient.java import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.

我正在制作一个java桌面应用程序,在这里我从麦克风录制语音,并在局域网中实时发送这些语音数据到另一个计算机系统,反之亦然

我能够通过麦克风录制声音,并将其输出到系统中的扬声器。现在使用UDP数据报套接字也要这样做,但UDPServer不接收数据流(字节[])

代码如下:VUClient.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.sound.sampled.*;

public class VUClient extends JFrame {

    boolean stopaudioCapture = false;
    ByteArrayOutputStream byteOutputStream;
    AudioFormat adFormat;
    TargetDataLine targetDataLine;
    AudioInputStream InputStream;
    SourceDataLine sourceLine;
    Graphics g;

    public static void main(String args[]) {
        new VUClient();
    }

    public VUClient() {
        final JButton capture =
                new JButton("Capture");
        final JButton stop =
                new JButton("Stop");
        final JButton play =
                new JButton("Playback");

        capture.setEnabled(true);
        stop.setEnabled(false);
        play.setEnabled(false);

        capture.addActionListener(
                new ActionListener() {
                    public void actionPerformed(
                            ActionEvent e) {
                        capture.setEnabled(false);
                        stop.setEnabled(true);
                        play.setEnabled(false);
                        captureAudio();
                    }
                });
        getContentPane().add(capture);

        stop.addActionListener(
                new ActionListener() {
                    public void actionPerformed(
                            ActionEvent e) {
                        capture.setEnabled(true);
                        stop.setEnabled(false);
                        play.setEnabled(true);
                        stopaudioCapture = true;
                        targetDataLine.close();
                    }
                });
        getContentPane().add(stop);

        play.addActionListener(
                new ActionListener() {
                    @Override
                    public void actionPerformed(
                            ActionEvent e) {
                        playAudio();
                    }
                });
        getContentPane().add(play);

        getContentPane().setLayout(new FlowLayout());
        setTitle("Capture/Playback Demo");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 100);
        getContentPane().setBackground(Color.white);
        setVisible(true);

        g = (Graphics) this.getGraphics();



    }

    private void captureAudio() {
        try {
            adFormat = getAudioFormat();
            DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, adFormat);
            targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo);
            targetDataLine.open(adFormat);
            targetDataLine.start();

            Thread captureThread = new Thread(new CaptureThread());
            captureThread.start();
        } catch (Exception e) {
            StackTraceElement stackEle[] = e.getStackTrace();
            for (StackTraceElement val : stackEle) {
                System.out.println(val);
            }
            System.exit(0);
        }
    }

    private void playAudio() {
        try {
            byte audioData[] = byteOutputStream.toByteArray();
//     System.out.println("byte auto "+byteOutputStream.toString());
            InputStream byteInputStream = new ByteArrayInputStream(audioData);
            AudioFormat adFormat = getAudioFormat();
            InputStream = new AudioInputStream(byteInputStream, adFormat, audioData.length / adFormat.getFrameSize());
            DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, adFormat);
            sourceLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
            sourceLine.open(adFormat);
            sourceLine.start();

            Thread playThread = new Thread(new PlayThread());
            playThread.start();


        } catch (Exception e) {
            System.out.println(e);
            System.exit(0);
        }
    }

    private AudioFormat getAudioFormat() {
        float sampleRate = 8000.0F;
        int sampleInbits = 16;
        int channels = 1;
        boolean signed = true;
        boolean bigEndian = false;
        return new AudioFormat(sampleRate, sampleInbits, channels, signed, bigEndian);
    }

    class CaptureThread extends Thread {

        byte tempBuffer[] = new byte[10000];

        public void run() {

            byteOutputStream = new ByteArrayOutputStream();
            stopaudioCapture = false;
            try {
                DatagramSocket clientSocket = new DatagramSocket();
//                InetAddress IPAddress = InetAddress.getByName("192.168.64.142");
                InetAddress IPAddress = InetAddress.getByName("localhost");

                while (!stopaudioCapture) {
                    int cnt = targetDataLine.read(tempBuffer, 0, tempBuffer.length);
                    if (cnt > 0) {
                        DatagramPacket sendPacket = new DatagramPacket(tempBuffer, tempBuffer.length, IPAddress, 9876);
                        clientSocket.send(sendPacket);

                        byteOutputStream.write(tempBuffer, 0, cnt);
//                        System.out.print(cnt);
                    }
//                    DatagramPacket sendPacket = new DatagramPacket(byteOutputStream, 10000, IPAddress, 9876);
//                    clientSocket.send(sendPacket);
                }

                byteOutputStream.close();

            } catch (Exception e) {
                System.out.println("CaptureThread::run()" + e);
                System.exit(0);
            }
        }
    }

    class PlayThread extends Thread {

        byte tempBuffer[] = new byte[10000];

        public void run() {
            try {
//                DatagramSocket clientSocket = new DatagramSocket();
//                InetAddress IPAddress = InetAddress.getByName("192.168.64.142");
//                InetAddress IPAddress = InetAddress.getByName("localhost");



                int cnt;
                while ((cnt = InputStream.read(tempBuffer, 0,tempBuffer.length)) != -1) {
                    if (cnt > 0) {
//                        DatagramPacket sendPacket = new DatagramPacket(tempBuffer, tempBuffer.length, IPAddress, 9876);
//                        clientSocket.send(sendPacket);

//                        sourceLine.write(tempBuffer, 0, cnt);
                    }
                }
//                sourceLine.drain();
//                sourceLine.close();
            } catch (Exception e) {
                System.out.println(e);
                System.exit(0);
            }
        }
    }    

}// Class End 
Vuser.java

import java.io.*;
import java.net.*;
import javax.sound.sampled.*;

public class VUServer {

    ByteArrayOutputStream byteOutputStream;
    AudioFormat adFormat;
    TargetDataLine targetDataLine;
    AudioInputStream InputStream;
    SourceDataLine sourceLine;

    private AudioFormat getAudioFormat() {
        float sampleRate = 8000.0F;
        int sampleInbits = 16;
        int channels = 1;
        boolean signed = true;
        boolean bigEndian = false;
        return new AudioFormat(sampleRate, sampleInbits, channels, signed, bigEndian);
    }

    public static void main(String args[]) {
        new VUServer().runVOIP();
    }

    public void runVOIP() {
        try {
            DatagramSocket serverSocket = new DatagramSocket(9876);
            byte[] receiveData = new byte[10000];

            while (true) {
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                serverSocket.receive(receivePacket);
//                String sentence = new String(receivePacket.getData());
                System.out.println("RECEIVED: ");// + sentence);

                try {
                    byte audioData[] = receivePacket.getData();//byteOutputStream.toByteArray();
//     System.out.println("byte auto "+byteOutputStream.toString());
                    InputStream byteInputStream = new ByteArrayInputStream(audioData);
                    AudioFormat adFormat = getAudioFormat();
                    InputStream = new AudioInputStream(byteInputStream, adFormat, audioData.length / adFormat.getFrameSize());
                    DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, adFormat);
                    sourceLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
                    sourceLine.open(adFormat);
                    sourceLine.start();

                    Thread playThread = new Thread(new PlayThread());
                    playThread.start();


                } catch (Exception e) {
                    System.out.println(e);
                    System.exit(0);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    class PlayThread extends Thread {

        byte tempBuffer[] = new byte[10000];

        public void run() {
            try {
                int cnt;
                while ((cnt = InputStream.read(tempBuffer, 0,tempBuffer.length)) != -1) {
                    if (cnt > 0) {
                        sourceLine.write(tempBuffer, 0, cnt);
                    }
                }
                sourceLine.drain();
                sourceLine.close();
            } catch (Exception e) {
                System.out.println(e);
                System.exit(0);
            }
        }
    }
}

你在这方面有问题(

字节[]接收数据=新字节[10000]

)

使尺寸比这个大。。。 我成功了

字节[]接收数据=新字节[90000]


它工作得很好……

我运行了代码。。。它很好用。。。有什么问题吗??虽然我更改了端口号R u单击播放按钮??当我通过麦克风讲话时,应接收语音包。这样行吗?