/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package granolasdr; import java.io.*; import java.net.*; import java.util.logging.Level; import java.util.logging.Logger; class TCPServer implements Runnable { private final ServerSocket rtlSocket; private final File sendFile; public TCPServer(File sendFile) throws IOException { rtlSocket = new ServerSocket(1234); this.sendFile = sendFile; } @Override public void run() { while (!Thread.interrupted()) { try { Socket clientSocket = rtlSocket.accept(); OutputStream outToServer = new BufferedOutputStream(clientSocket.getOutputStream()); BufferedInputStream sampleServer = new BufferedInputStream(clientSocket.getInputStream()); startDumper(sampleServer); FileInputStream fin = new FileInputStream(sendFile); byte[] samples = new byte[8192]; byte[] buffer = new byte[8192]; int num; float inv = 1f; while (!Thread.interrupted()) { try { num = fin.read(samples) >> 1; if (num <= 0) { System.out.println("Resetting the file"); fin.close(); fin = new FileInputStream(sendFile); num = fin.read(samples) >> 1; } } catch (IOException ex) { System.out.println("Resetting the file"); fin.close(); fin = new FileInputStream(sendFile); num = fin.read(samples) >> 1; } for (int cnt = 0; cnt < num; cnt++) { // Note that I stored samples with dc in center, move back to zero with inv for rtl buffer[2 * cnt] = (byte) (((samples[2 * cnt] & 0xff) + 127.0f) * inv); buffer[2 * cnt + 1] = (byte) (((samples[2 * cnt + 1] & 0xff) + 127.0f) * inv); inv = -inv; } outToServer.write(buffer, 0, num); try { Thread.sleep(2); } catch (InterruptedException ex) { Logger.getLogger(TCPServer.class.getName()).log(Level.SEVERE, null, ex); } } } catch (IOException ex) { Logger.getLogger(TCPServer.class.getName()).log(Level.SEVERE, null, ex); } } } // Gets commands from socket and drops them on the floor. public void startDumper(final BufferedInputStream sampleServer) { Thread dumpthread = new Thread() { @Override public void run() { try { while (!Thread.interrupted()) { byte[] samples = new byte[8192]; int num = sampleServer.read(samples) >> 1; if (num > 0) { System.out.println("Got a command from client " + num + " bytes"); } else { Thread.sleep(1000); } } } catch (IOException ex) { Logger.getLogger(TCPServer.class.getName()).log(Level.SEVERE, null, ex); } catch (InterruptedException ex) { Logger.getLogger(TCPServer.class.getName()).log(Level.SEVERE, null, ex); } } }; dumpthread.setName("Dump Thread"); dumpthread.setDaemon(true); dumpthread.start(); } }