diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduReceiverEspduVPNSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduReceiverEspduVPNSender.java new file mode 100755 index 0000000000000000000000000000000000000000..9f48a19dbd11707777bd3f198a8e9b27494137c1 --- /dev/null +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduReceiverEspduVPNSender.java @@ -0,0 +1,130 @@ +package MV3500Cohort2020JulySeptember.homework4.WeissenbergerGoericke; + +import java.io.*; +import java.net.*; +import java.util.*; + +import edu.nps.moves.dis7.pdus.*; +import edu.nps.moves.dis7.utilities.*; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Receives PDUs from mobile devise in IEEE DIS format. Send it over VPN (argon) + * to Stefan's PDU Receiver + * + * @date 09/05/2020 + * @author Bernd + * @version 0.1 + */ +public class GermanyEspduReceiverEspduVPNSender { + + /** + * Stefan's IP in argon + */ + public static final String VPN_RECEIVER_ADDRESS = "10.0.105.10"; + + /** + * Max size of a PDU in binary format that we can receive. This is actually + * somewhat outdated--PDUs can be larger--but this is a reasonable starting + * point. + */ + public static final int MAX_PDU_SIZE = 8192; + + /** + * Default port used, matches Wireshark DIS capture default + */ + public static final int DEFAULT_PORT = 3000; + + /** + * Output prefix to identify this class + */ + private final static String TRACE_PREFIX = "[" + GermanyEspduVPNReceiver.class.getName() + "] "; + + public static void main(String args[]) { + System.out.println(TRACE_PREFIX + "started..."); + + MulticastSocket socket; + DatagramPacket packet; + PduFactory pduFactory = new PduFactory(); + int pduCount = 0; + + try { + // Specify the socket to receive data + socket = new MulticastSocket(DEFAULT_PORT); + + + + System.out.println(TRACE_PREFIX + "listening for PDU packets on port " + DEFAULT_PORT); + System.out.println("==============="); + + while (true) // Loop infinitely, receiving datagrams + { + byte buffer[] = new byte[MAX_PDU_SIZE]; + packet = new DatagramPacket(buffer, buffer.length); + + socket.receive(packet); + + List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData(), packet.getLength()); + if (pduBundle.size() > 1) { + System.out.println("Bundle size is " + pduBundle.size()); + } + + // end iterator loop through PDU bundle + for (Pdu aPdu : pduBundle) { + pduCount++; + String receiptMessage = String.format("%3s", pduCount) // right justify, 3 characters + + ". received PDU type " + aPdu.getPduType().getValue() + "=" + aPdu.getPduType().name() + " " + aPdu.getClass().getName(); + if (aPdu instanceof EntityStatePdu) { + System.out.println(receiptMessage); + EntityID entityID = ((EntityStatePdu) aPdu).getEntityID(); + Vector3Double position = ((EntityStatePdu) aPdu).getEntityLocation(); + System.out.println(" entityID triplet: [" + entityID.getSiteID() + ", " + entityID.getApplicationID() + ", " + entityID.getEntityID() + "] "); + System.out.println(" Location in DIS coordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]"); + sendESPDU((EntityStatePdu) aPdu); + }else { + System.out.println(receiptMessage); + } + + } // end of bundle loop + } // end of while loop + } // end try block // end try block // end try block // end try block + catch (IOException ioe) { + System.out.println(TRACE_PREFIX + "Problem with input/output, see exception trace:"); + System.out.println(ioe); + } + System.out.println(TRACE_PREFIX + "complete."); + } // end main + + public static void sendESPDU(EntityStatePdu espdu) { + MulticastSocket socket = null; // must be initialized, even if null + InetAddress destinationIp = null; // must be initialized, even if null + + try { + destinationIp = InetAddress.getByName(VPN_RECEIVER_ADDRESS); + } catch (UnknownHostException e) { + System.out.println(e + " Cannot create address"); + System.exit(0); + } + try { + // Set up a socket to send information + socket = new MulticastSocket(DEFAULT_PORT); + } catch (IOException ex) { + Logger.getLogger(GermanyEspduReceiverEspduVPNSender.class.getName()).log(Level.SEVERE, null, ex); + } + + Set<InetAddress> broadcastAddresses; + // Loop through sending N ESPDUs + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(baos); + try { + espdu.marshal(dos); + byte[] data = baos.toByteArray(); + + DatagramPacket packet = new DatagramPacket(data, data.length, destinationIp, DEFAULT_PORT); + socket.send(packet); + } catch (Exception ex) { + Logger.getLogger(GermanyEspduReceiverEspduVPNSender.class.getName()).log(Level.SEVERE, null, ex); + } + } // end sendESPDU +} // end class diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduVPNReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduVPNReceiver.java new file mode 100755 index 0000000000000000000000000000000000000000..9615649a8a83fb7bc66110f0596bab5c5a4fc29c --- /dev/null +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/GermanyEspduVPNReceiver.java @@ -0,0 +1,88 @@ +package MV3500Cohort2020JulySeptember.homework4.WeissenbergerGoericke; + +import java.io.*; +import java.net.*; +import java.util.*; + +import edu.nps.moves.dis7.pdus.*; +import edu.nps.moves.dis7.utilities.*; + +/** + * Receives PDUs from GermanyEspduReceiverEspduVPNSender in IEEE DIS format. + * + * @date 09/05/2020 + * @author Bernd/Stefan + * @version 0.1 + */ +public class GermanyEspduVPNReceiver { + + /** + * Max size of a PDU in binary format that we can receive. This is actually + * somewhat outdated--PDUs can be larger--but this is a reasonable starting + * point. + */ + public static final int MAX_PDU_SIZE = 8192; + + /** + * Default port used, matches Wireshark DIS capture default + */ + public static final int DEFAULT_PORT = 3000; + + /** + * Output prefix to identify this class + */ + private final static String TRACE_PREFIX = "[" + GermanyEspduVPNReceiver.class.getName() + "] "; + + public static void main(String args[]) { + System.out.println(TRACE_PREFIX + "started..."); + + MulticastSocket socket; + DatagramPacket packet; + PduFactory pduFactory = new PduFactory(); + int pduCount = 0; + + try { + // Specify the socket to receive data + socket = new MulticastSocket(DEFAULT_PORT); + + + + System.out.println(TRACE_PREFIX + "listening for PDU packets on port " + DEFAULT_PORT); + System.out.println("==============="); + + while (true) // Loop infinitely, receiving datagrams + { + byte buffer[] = new byte[MAX_PDU_SIZE]; + packet = new DatagramPacket(buffer, buffer.length); + + socket.receive(packet); + + List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData(), packet.getLength()); + if (pduBundle.size() > 1) { + System.out.println("Bundle size is " + pduBundle.size()); + } + + // end iterator loop through PDU bundle + for (Pdu aPdu : pduBundle) { + pduCount++; + String receiptMessage = String.format("%3s", pduCount) // right justify, 3 characters + + ". received PDU type " + aPdu.getPduType().getValue() + "=" + aPdu.getPduType().name() + " " + aPdu.getClass().getName(); + if (aPdu instanceof EntityStatePdu) { + System.out.println(receiptMessage); + EntityID entityID = ((EntityStatePdu) aPdu).getEntityID(); + Vector3Double position = ((EntityStatePdu) aPdu).getEntityLocation(); + System.out.println(" entityID triplet: [" + entityID.getSiteID() + ", " + entityID.getApplicationID() + ", " + entityID.getEntityID() + "] "); + System.out.println(" Location in DIS coordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]"); + }else { + System.out.println(receiptMessage); + } + } // end of bundle loop + } // end of while loop + } // end try block // end try block // end try block // end try block + catch (IOException ioe) { + System.out.println(TRACE_PREFIX + "Problem with input/output, see exception trace:"); + System.out.println(ioe); + } + System.out.println(TRACE_PREFIX + "complete."); + } // end main +} // end class diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/TCPReceiverVPNBridge.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/TCPReceiverVPNBridge.java deleted file mode 100644 index 9c051f935efe94615f9c3102a73ba91f095caeac..0000000000000000000000000000000000000000 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/TCPReceiverVPNBridge.java +++ /dev/null @@ -1,99 +0,0 @@ - -package MV3500Cohort2020JulySeptember.homework4.WeissenbergerGoericke; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.net.InetAddress; -import java.net.ServerSocket; -import java.net.Socket; - -/** - * Just for me for testing - not part of Homework #3! - * @author Loki - */ -public class TCPReceiverVPNBridge { - - protected static String server_IP_VPN = "10.1.105.9"; // argon IP - protected static String server_IP_Local = "192.168.188.103"; // Local IP - - private static final int server_Port = 2317 ; - protected static String client_IP ; - - /** - * @param args the command line arguments - */ - public static void main(String[] args) { - try { - - - -// ServerSocket waits for a connection from a client. - // Notice that it is outside the loop; ServerSocket - // needs to be made only once. - System.out.println("TcpExample3Server has started..."); // it helps debugging to put this on console first - - ServerSocket serverSocket = new ServerSocket(server_Port); - OutputStream os; - PrintStream ps; - InetAddress localAddress, remoteAddress; - int localPort, remotePort; - int serverLoopCount = 0; - - // Server is up and waiting (i.e. "blocked" or paused) - // Loop, infinitely, waiting for client connections. - // Stop the program somewhere else. - while (true) { - - // block until connected to a client - try (Socket clientConnectionSocket = serverSocket.accept()) - { - serverLoopCount++; // increment at beginning of loop for reliability - - // Now hook everything up (i.e. set up the streams), Java style: - os = clientConnectionSocket.getOutputStream(); - ps = new PrintStream(os); - ps.println("This is response " + serverLoopCount + " produced by the server."); // this gets sent back to client! - - // Print some information locally about the Socket connection. - // This includes the port and IP numbers on both sides (the socket pair). - localAddress = clientConnectionSocket.getLocalAddress(); - remoteAddress = clientConnectionSocket.getInetAddress(); - localPort = clientConnectionSocket.getLocalPort(); - remotePort = clientConnectionSocket.getPort(); - - System.out.print ("Server loop " + serverLoopCount + ": "); - - // My socket pair connection looks like this, to localhost: - // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54876 )) - // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54881 )) - - // Why is the first IP/port the same, while the second set has different ports? - System.out.println("TcpExample3Server socket pair showing host name, address, port:"); - System.out.println(" (( " + - localAddress.getHostName() + "=" + localAddress.getHostAddress() + ", " + localPort + " ), ( " + - remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " ))"); - - if ( localAddress.getHostName().equals( localAddress.getHostAddress()) || - remoteAddress.getHostName().equals(remoteAddress.getHostAddress())) - System.out.println(" note HostName matches address if host has no DNS name"); - - // Notice the use of flush() and try w/ resources. Without - // the try w/ resources the Socket object may stay open for - // a while after the client has stopped needing this - // connection. try w/ resources explicitly ends the connection. - ps.flush(); - // like it or not, you're outta here! - } - } - } catch (IOException e) { - System.err.println("Problem with TcpExample3Server networking: " + e); - - // Provide more helpful information to user if exception occurs due to running twice at one time - if (e instanceof java.net.BindException) { - System.err.println("*** Be sure to stop any other running instances of programs using this port!"); - } - } - } - -} diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/TcpServerForFinal.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/TcpServerForFinal.java deleted file mode 100644 index f7a8082ede0b933c2927c45b470ebe83394c4f9a..0000000000000000000000000000000000000000 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/TcpServerForFinal.java +++ /dev/null @@ -1,152 +0,0 @@ -package MV3500Cohort2020JulySeptember.homework4.WeissenbergerGoericke; - -import java.io.*; -import java.net.*; - -/** - * Very slightly more complex than example1, further modifying example2. The - * only thing this does differently is introduce a loop into the response, so - * you don't have to restart the program after one response. Also, it prints out - * the socket pair the server sees. Run the program via telnet several times and - * compare the socket pairs. - * - * telnet (nc) localhost 2317 - * - * If you're sophisticated you can contact the instructor's computer while - * running this program. - * - * telnet (nc) [ipNumberOfServerLaptop] 2317 - * - * and have the instructor display the socket pairs received. - * - * @author mcgredo - * @author brutzman - */ -public class TcpServerForFinal { - - public static final String DEST_INET_AD = "127.0.0.1"; - public static final String LOCAL_WIFI_INET = "192.168.188.106"; - - public static void main(String[] args) { - try { - - // ServerSocket waits for a connection from a client. - // Notice that it is outside the loop; ServerSocket - // needs to be made only once. - System.out.println("TcpExample3Server has started..."); // it helps debugging to put this on console first - - //ServerSocket serverSocket = new ServerSocket(2317); - InetAddress[] ia = InetAddress.getAllByName(LOCAL_WIFI_INET); - for (int i = 0;i < ia.length; i++){ - System.out.println("---: "+ia[i]); - } - ServerSocket serverSocket = new ServerSocket(2317, 100, ia[0]); - - InputStream is; - InputStreamReader isr; - BufferedReader br; - String serverMessage; - - - InetAddress localAddress, remoteAddress; - int localPort, remotePort; - int serverLoopCount = 0; - - // Server is up and waiting (i.e. "blocked" or paused) - // Loop, infinitely, waiting for client connections. - // Stop the program somewhere else. - while (true) { - System.out.println("Look for connection...."); - // block until connected to a client - try (Socket clientConnectionSocket = serverSocket.accept()) - { - serverLoopCount++; // increment at beginning of loop for reliability - - // Now hook everything up (i.e. set up the streams), Java style: - is = clientConnectionSocket.getInputStream(); - isr = new InputStreamReader(is); - br = new BufferedReader(isr); - - serverMessage = br.readLine(); - System.out.println("The message the mobile sent was: '" + serverMessage + "'"); - // Print some information locally about the Socket connection. - // This includes the port and IP numbers on both sides (the socket pair). - localAddress = clientConnectionSocket.getLocalAddress(); - remoteAddress = clientConnectionSocket.getInetAddress(); - localPort = clientConnectionSocket.getLocalPort(); - remotePort = clientConnectionSocket.getPort(); - - System.out.println ("Server loop " + serverLoopCount + ": "); - - System.out.println("TcpExample3Server socket pair showing host name, address, port:"); - - } - sendResultViaUDP(serverMessage); - } - } catch (IOException e) { - System.err.println("Problem with TcpExample3Server networking: " + e); - - // Provide more helpful information to user if exception occurs due to running twice at one time - if (e instanceof java.net.BindException) { - System.err.println("*** Be sure to stop any other running instances of programs using this port!"); - } - } - } - - /** - * send the result to Stefan 2x - * @param result - * @param inetAddress Stefans's IP - * @param port Stefans's UDP port number - * @throws IOException - */ - private static void sendResultViaUDP(String result) throws IOException{ - DatagramSocket udpSocket = null; - DataOutputStream dos = null; - - try - { - // Create a UDP socket - udpSocket = new DatagramSocket(); // let system assign output port, then SENDING_PORT not needed - - // Put together a message with binary content. "ByteArrayOutputStream" - // is a java.io utility that lets us put together an array of binary - // data, which we put into the UDP packet. - - ByteArrayOutputStream baos = new ByteArrayOutputStream(1500); // how many bytes are in buffer? MTU=1500 is good - dos = new DataOutputStream(baos); // wrapper for writing values, connects both streams - - // Put together a packet to send - // these types and order of variables must match on sender and receiver - byte[] byteArray = baos.toByteArray(); - InetAddress destinationAddress = InetAddress.getByName(DEST_INET_AD); - DatagramPacket datagramPacket = new DatagramPacket(byteArray, byteArray.length, destinationAddress, 1415); - - for (int index = 1; index <= 2; index++) - { - dos.writeUTF (result); - dos.flush(); // sends DataOutputStream to ByteArrayOutputStream - byteArray = baos.toByteArray(); // OK so go get the flushed result... - datagramPacket.setData(byteArray); // and put it in the packet... - udpSocket.send(datagramPacket); // and send it away. boom gone, nonblocking. - - Thread.sleep(1000); // Send packets at rate of one per second - baos.reset(); // clear the output stream after sending - } - dos.close(); - } - catch (IOException | InterruptedException e) - { - System.err.println("Problem with UdpSender, see exception trace:"); - System.err.println(e); - } - finally // clean up prior to exit, don't want to leave behind zombies - { - if (udpSocket != null) - udpSocket.close(); - - if (dos != null) - dos.close(); - } - } -} diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/UDPResultReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/UDPResultReceiver.java deleted file mode 100644 index 36390f308218cd8d9d9b43b2a0b9b120e5321922..0000000000000000000000000000000000000000 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/WeissenbergerGoericke/UDPResultReceiver.java +++ /dev/null @@ -1,71 +0,0 @@ - -package MV3500Cohort2020JulySeptember.homework4.Weissenberger; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; - -/** - * This class will be connected by an UDP sender over VPN (argon) - * @date 09/02/2020 - * @author Loki - * @group Weissenberger/Goericke - */ -public class UDPResultReceiver { - - public static final int RECEIVING_PORT = 1415; - - /** - * @param args the command line arguments - * @throws java.io.IOException - */ - public static void main(String[] args) throws IOException - { - DatagramSocket udpSocket = null; - - try - { - System.out.println(UDPResultReceiver.class.getName() + " started..."); - - // Create a UDP socket - udpSocket = new DatagramSocket(RECEIVING_PORT); - udpSocket.setReceiveBufferSize(1500); // how many bytes are in buffer? MTU=1500 is good - udpSocket.setBroadcast(false); // we're just receiving here - - byte[] byteArray = new byte[1500]; - DatagramPacket receivePacket = new DatagramPacket(byteArray, byteArray.length); - - ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); - DataInputStream dis = new DataInputStream(bais); - - String received; - - // You need a new receiving packet to read from every packet received - while (true) - { - udpSocket.receive(receivePacket); // blocks until packet is received - - received = dis.readUTF(); - - dis.reset(); // now clear the input stream after reading, in preparation for next loop - - System.out.println("Received from Bernd: "+received); - - } - } - catch(IOException e) - { - System.err.println("Problem with UdpReceiver, see exception trace:"); - System.err.println(e); - } - finally // clean up prior to exit, don't want to leave behind zombie socket - { - if (udpSocket != null) - udpSocket.close(); - System.out.println(UDPResultReceiver.class.getName() + " complete."); // all done - } - } - -}