title: send continous bytes[] data into DatagramSocket,DatagramPacket in java
body: <p>I'm making a java desktop application, where I'm recording voice from the mic and in LAN real time want to send this voice data to another computer system and vice-verse.</p>
  
  <p>I'm able to record sound though mic and out to speaker in my system. Now using UDP Datagram socket want to do this same but data stream(byte[]) is not receive by the UDPServer.</p>
  
  <p>here is the code : VUClient.java</p>
  
  <pre><code>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 &gt; 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 &gt; 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 
  </code></pre>
  
  <p>VUServer.java</p>
  
  <pre><code>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 &gt; 0) {
                          sourceLine.write(tempBuffer, 0, cnt);
                      }
                  }
                  sourceLine.drain();
                  sourceLine.close();
              } catch (Exception e) {
                  System.out.println(e);
                  System.exit(0);
              }
          }
      }
  }
  </code></pre>