diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPReceiverGaribay.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPReceiverGaribay.java new file mode 100644 index 0000000000000000000000000000000000000000..2f1b250b8d9b45e30625ddfc4de3c28441861ba4 --- /dev/null +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPReceiverGaribay.java @@ -0,0 +1,88 @@ + +package MV3500Cohort2020JulySeptember.homework3.Garibay; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; + +/** + * + * @author chris + */ +public class UDPReceiverGaribay +{ +// public static final int SENDING_PORT = 1414; // port used by UdpSender, unneeded here + public static final int RECEIVING_PORT = 1415; + public static final String DESINATION_HOST = "localhost"; + + /** + * @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(UdpReceiver.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); + + boolean isEvenParity; + int packetCount = 0; + int firstInt; + float secondFloat; + String thirdString; + String padding; + + // You need a new receiving packet to read from every packet received + while (true) + { + packetCount++; // good practice to increment counter at start of loop, when possible + udpSocket.receive(receivePacket); // blocks until packet is received + + // values of interest follow. order and types of what was sent must match what you are reading! + firstInt = dis.readInt(); // packetID + secondFloat = dis.readFloat(); + thirdString = dis.readUTF(); // string value with guaranteed encoding, matches UTF-8 is 8 bit + isEvenParity = dis.readBoolean(); // ok, we've gotten everything we're looking for. + + dis.reset(); // now clear the input stream after reading, in preparation for next loop + + if (isEvenParity) + padding = " "; + else padding = ""; + + System.out.println("[" + UdpReceiver.class.getName() + "]" + + " packetID=" + firstInt + // have output message use same name as sender + ", second float value=" + secondFloat + + ", third String value=\"" + thirdString + "\"" + // note that /" is literal quote character + " isPacketIdEvenParity=" + isEvenParity + "," + padding + + " packet counter=" + packetCount); + } + } + 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(UdpReceiver.class.getName() + " complete."); // all done + } + } +} diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPSenderGaribay.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPSenderGaribay.java new file mode 100644 index 0000000000000000000000000000000000000000..21c6de803955c64d7ea0a8d431185b524e839733 --- /dev/null +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Garibay/UDPSenderGaribay.java @@ -0,0 +1,114 @@ + +package MV3500Cohort2020JulySeptember.homework3.Garibay; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; + +/** + * + * @author chris + */ +public class UDPSenderGaribay +{ + // System properties: https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html + public static final String MY_NAME = System.getProperty("user.name"); // guru incantation 8) +// public static final int SENDING_PORT = 1414; // not needed, can let system choose an open local port + public static final int RECEIVING_PORT = 1415; + public static final int TOTAL_PACKETS_TO_SEND = 100; + + // here is what we need for lab comms + // Bill Mahan's host ip + public static final String DESTINATION_HOST = "10.1.105.13"; // localhost 127.0.0.1 or argon 10.1.105.1 or 10.1.105.1 or whatever + + @SuppressWarnings("SleepWhileInLoop") + public static void main(String[] args) throws IOException + { + DatagramSocket udpSocket = null; + DataOutputStream dos = null; + int packetID = 0; // counter variable to send in packet + float value = -1.0f; // unreachable value is good sentinel to ensure expected changes occur + String message = MY_NAME + "It's not a trick question!"; // no really + String padding = new String(); + + try + { + System.out.println(UdpSender.class.getName() + " shows how to send simple-type values via DataOutputStream"); + System.out.println(UdpSender.class.getName() + " started..."); + + // 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(); + + // ID of the host we are sending to + InetAddress destinationAddress = InetAddress.getByName(DESTINATION_HOST); + // ID of the host we are sending from + InetAddress sourceAddress = InetAddress.getByName("localhost"); // possibly identical if source not modified + + DatagramPacket datagramPacket = new DatagramPacket(byteArray, byteArray.length, destinationAddress, RECEIVING_PORT); + + // Hmmm, how fast does UDP stream go? Does UDP effectively slow packets down, or does + // this cause network problems? (hint: yes for an unlimited send rate, unlike TCP). + // How do you know on the receiving side that you haven't received a + // duplicate UDP packet, out-of-order packet, or dropped packet? your responsibility. + + for (int index = 1; index <= TOTAL_PACKETS_TO_SEND; index++) // avoid infinite send loops in code, they can be hard to kill! + { + packetID++; // increment counter, prefer using explicit value to index + value = TOTAL_PACKETS_TO_SEND - packetID; // countdown + boolean isPacketIdEvenParity = ((packetID % 2) == 0); // % is modulo operator; result 0 is even parity, 1 is odd parity + + // values of interest follow. order and types of what was sent must match what you are reading! + dos.writeInt (packetID); + dos.writeFloat (value); + dos.writeUTF (message); // string value with guaranteed encoding, matches UTF-8 is 8 bit + dos.writeBoolean(isPacketIdEvenParity); + + 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. +// System.out.println("udpSocket output port=" + udpSocket.getLocalPort()); // diagnostic tells what port was chosen by system + + if (isPacketIdEvenParity) + padding = " "; + else padding = ""; + + Thread.sleep(1000); // Send packets at rate of one per second + System.out.println("[" + UdpSender.class.getName() + "] " + MY_NAME + " " + sourceAddress + + " sent values(" + packetID + "," + value + ",\"" + message + "\"," + isPacketIdEvenParity + + ")" + padding + " as packet #" + index + " of " + TOTAL_PACKETS_TO_SEND); + baos.reset(); // clear the output stream after sending + } + } + 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(); + System.out.println(UdpSender.class.getName() + " complete."); // all done + } + } +} diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/TCPNumberReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/TCPNumberReceiverUDPResultSender.java similarity index 91% rename from assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/TCPNumberReceiver.java rename to assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/TCPNumberReceiverUDPResultSender.java index cb31931d1892a9efd1a02e6c895c0bfd819d23a8..f9a58490506bf9d40d70cc31b3ce1bc758f87e24 100644 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/TCPNumberReceiver.java +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Goericke/TCPNumberReceiverUDPResultSender.java @@ -1,4 +1,4 @@ -package MV3500Cohort2020JulySeptember.homework3.Weissenberger; +package MV3500Cohort2020JulySeptember.homework3.Goericke; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; @@ -16,10 +16,9 @@ import java.net.Socket; * This class will be connected by an TCP sender over VPN (argon), calculating * a result of an equation and send the result back via UDP over VPN. * @date 08/17/2020 - * @author Loki - * @group Weissenberger/Goericke + * @group Goericke/Weissenberger */ -public class TCPNumberReceiver { +public class TCPNumberReceiverUDPResultSender { // Change this to the port where the TCP server is listening private static final int TCP_ARGON_SERVER_PORT = 2317; @@ -34,17 +33,19 @@ public class TCPNumberReceiver { System.out.println("TCPNumberReceiver has started..."); ServerSocket serverSocket = new ServerSocket(TCP_ARGON_SERVER_PORT); InetAddress remoteAddress; - + + // declare the stream and readers InputStream inputStream; InputStreamReader inputStreamReader; BufferedReader bufferedReader; + + // declare needed variables String clientMessage; int number1, number2; String calculation_Method; int iUDPResultReceivingPort; // 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 @@ -54,17 +55,21 @@ public class TCPNumberReceiver { inputStream = clientConnectionSocket.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); bufferedReader = new BufferedReader(inputStreamReader); + + // get the date from TCP packet clientMessage = bufferedReader.readLine(); number1 = Integer.parseInt(bufferedReader.readLine()); number2 = Integer.parseInt(bufferedReader.readLine()); calculation_Method = bufferedReader.readLine(); iUDPResultReceivingPort = Integer.parseInt(bufferedReader.readLine()); + + // print them out (for debugging) System.out.println("Message recived: "+clientMessage); System.out.println("Number 1 recived: "+number1); System.out.println("Number 2 recived: "+number2); System.out.println("Calc Method recived: "+calculation_Method); System.out.println("Send result to port: "+iUDPResultReceivingPort); - // This includes the port and IP numbers on both sides (the socket pair). + // get the sender IP (is used for sending UDP) remoteAddress = clientConnectionSocket.getInetAddress(); System.out.println("Send result to IP: "+remoteAddress.getHostAddress()); @@ -83,6 +88,13 @@ public class TCPNumberReceiver { } } + /** + * send the result to Bernd 10x + * @param result + * @param inetAddress Bernd's IP + * @param port Bernd's UDP port number + * @throws IOException + */ private static void sendResultViaUDP(float result, InetAddress inetAddress, int port) throws IOException{ DatagramSocket udpSocket = null; DataOutputStream dos = null; diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpReceiver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..7d7ca1757bf7b15d90f93c3d16e2f1fd5570ae38 --- /dev/null +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpReceiver.java @@ -0,0 +1,84 @@ +package MV3500Cohort2020JulySeptember.homework3.Mahan; + +import java.io.*; +import java.net.*; + +/** + * + * @author Bill + */ +public class MahanUdpReceiver +{ +// public static final int SENDING_PORT = 1414; // port used by UdpSender, unneeded here + public static final int RECEIVING_PORT = 1415; + public static final String DESINATION_HOST = "10.1.105.12"; + + /** + * @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(MahanUdpReceiver.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); + + boolean isEvenParity; + int packetCount = 0; + int firstInt; + float secondFloat; + String thirdString; + String padding; + + // You need a new receiving packet to read from every packet received + while (true) + { + packetCount++; // good practice to increment counter at start of loop, when possible + udpSocket.receive(receivePacket); // blocks until packet is received + + // values of interest follow. order and types of what was sent must match what you are reading! + firstInt = dis.readInt(); // packetID + secondFloat = dis.readFloat(); + thirdString = dis.readUTF(); // string value with guaranteed encoding, matches UTF-8 is 8 bit + isEvenParity = dis.readBoolean(); // ok, we've gotten everything we're looking for. + + dis.reset(); // now clear the input stream after reading, in preparation for next loop + + if (isEvenParity) + padding = " "; + else padding = ""; + + System.out.println("[" + MahanUdpReceiver.class.getName() + "]" + + " packetID=" + firstInt + // have output message use same name as sender + ", second float value=" + secondFloat + + ", third String value=\"" + thirdString + "\"" + // note that /" is literal quote character + " isPacketIdEvenParity=" + isEvenParity + "," + padding + + " packet counter=" + packetCount); + } + } + 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(MahanUdpReceiver.class.getName() + " complete."); // all done + } + } +} diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpSender.java b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpSender.java new file mode 100644 index 0000000000000000000000000000000000000000..199cbd5217bd2e9ce943a7df983686dc3ed3a474 --- /dev/null +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/MahanUdpSender.java @@ -0,0 +1,106 @@ +package MV3500Cohort2020JulySeptember.homework3.Mahan; + +import java.io.*; +import java.net.*; + +/** + * + * @author Bill + */ +public class MahanUdpSender +{ + // System properties: https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html + public static final String MY_NAME = System.getProperty("user.name"); // guru incantation 8) +// public static final int SENDING_PORT = 1414; // not needed, can let system choose an open local port + public static final int RECEIVING_PORT = 1415; + public static final int TOTAL_PACKETS_TO_SEND = 100; + + // here is what we need for lab comms + public static final String DESTINATION_HOST = "10.1.105.12"; // localhost 127.0.0.1 or argon 10.1.105.1 or 10.1.105.1 or whatever + + @SuppressWarnings("SleepWhileInLoop") + public static void main(String[] args) throws IOException + { + DatagramSocket udpSocket = null; + DataOutputStream dos = null; + int packetID = 0; // counter variable to send in packet + float value = -1.0f; // unreachable value is good sentinel to ensure expected changes occur + String message = MY_NAME + " says I see you Chris"; // no really + String padding = new String(); + + try + { + System.out.println(MahanUdpSender.class.getName() + " shows how to send simple-type values via DataOutputStream"); + System.out.println(MahanUdpSender.class.getName() + " started..."); + + // 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(); + + // ID of the host we are sending to + InetAddress destinationAddress = InetAddress.getByName(DESTINATION_HOST); + // ID of the host we are sending from + InetAddress sourceAddress = InetAddress.getByName("localhost"); // possibly identical if source not modified + + DatagramPacket datagramPacket = new DatagramPacket(byteArray, byteArray.length, destinationAddress, RECEIVING_PORT); + + // Hmmm, how fast does UDP stream go? Does UDP effectively slow packets down, or does + // this cause network problems? (hint: yes for an unlimited send rate, unlike TCP). + // How do you know on the receiving side that you haven't received a + // duplicate UDP packet, out-of-order packet, or dropped packet? your responsibility. + + for (int index = 1; index <= TOTAL_PACKETS_TO_SEND; index++) // avoid infinite send loops in code, they can be hard to kill! + { + packetID++; // increment counter, prefer using explicit value to index + value = TOTAL_PACKETS_TO_SEND - packetID; // countdown + boolean isPacketIdEvenParity = ((packetID % 2) == 0); // % is modulo operator; result 0 is even parity, 1 is odd parity + + // values of interest follow. order and types of what was sent must match what you are reading! + dos.writeInt (packetID); + dos.writeFloat (value); + dos.writeUTF (message); // string value with guaranteed encoding, matches UTF-8 is 8 bit + dos.writeBoolean(isPacketIdEvenParity); + + 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. +// System.out.println("udpSocket output port=" + udpSocket.getLocalPort()); // diagnostic tells what port was chosen by system + + if (isPacketIdEvenParity) + padding = " "; + else padding = ""; + + Thread.sleep(1000); // Send packets at rate of one per second + System.out.println("[" + MahanUdpSender.class.getName() + "] " + MY_NAME + " " + sourceAddress + + " sent values(" + packetID + "," + value + ",\"" + message + "\"," + isPacketIdEvenParity + + ")" + padding + " as packet #" + index + " of " + TOTAL_PACKETS_TO_SEND); + baos.reset(); // clear the output stream after sending + } + } + 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(); + System.out.println(MahanUdpSender.class.getName() + " complete."); // all done + } + } +} diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/README.md b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/README.md index 0144d62d033fbe094ceac7a6d1bedc12d3c158b0..40200564c63ff03aa0328e08b2713cd80d252c3a 100644 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/README.md +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/README.md @@ -1,12 +1,8 @@ -## Homework 2: Multicast Networking -Modify this file to describe your project work. +This program uses UDP over ARGON.net +to connect with Chris Garibay's port and then +finds the modulo as being either true or false. +Just run the server and the corresponding receiver. +Also included are two screenshots to verify +send and receive capabilities. -Typical deliverables include properly packages source, execution log, and screen shots as appropriate. - -References include -* [README.md](../README.md) for this homework project. -* [README.md](../../../../README.md) for course assignments execution instructions. -* [assignments source subdirectories](../../../../../assignments/src) show examples from previous cohorts. - -Questions and innovation are always welcome, good luck! diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/receiving screenshot.png b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/receiving screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b92d41084c8cc01b4fce816f91a2e5d1d2cfb467 Binary files /dev/null and b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/receiving screenshot.png differ diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/sendingscreenshot.png b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/sendingscreenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb912bab6c489924bd319693efa221e551c5fcc Binary files /dev/null and b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Mahan/sendingscreenshot.png differ diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/README.md b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/README.md index 3a859295470542c1556ab765d4308ff2a1cbe794..3ec21e2b976a5937ab94a80cb4028ccb79441eae 100644 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/README.md +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/README.md @@ -11,9 +11,29 @@ References include Questions and innovation are always welcome, good luck! + + +************************************************** +Project for HW #3 +Team: "Germany" (Stefan and Bernd) +************************************************** + + + This program(s) do(es) the following: - send two numbers, a mathematical operator and a port number over VPN to a TCP receiver - the TCP receiver calculates the result and send it back to the sender over VPN using UDP! - the UDP receiver shows the result +The main focus was to send via TCP over a VPN, do something and send the result back via UDP. + +How to run the project: +0. connect both computer with the argon net +1. run UDPResultReceiver on Bernd's computer +2. run TCPNumberReceiverUDPResultSender on Stefan's computer +3. find Stefan's IP within the argon net +4. change the TCP_ARGON_SERVER_IP in class TCPNumberSender to Stefan's IP. +5. run TCPNumberSender + +(you can edit the numbers and run TCPNumberSender multiple times...) diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/Screenshots.docx b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/Screenshots.docx new file mode 100644 index 0000000000000000000000000000000000000000..ccb72d8a6b6bf96522119ec8837209f50fba9496 Binary files /dev/null and b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/Screenshots.docx differ diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/logic.jpg b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/logic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fa827094c869ea38ad6d265395843694f0263b8 Binary files /dev/null and b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/logic.jpg differ diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/logic.vsdx b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/logic.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..4d2e6878bd82a1d201bc8f4742ff1a67d4cc5f34 Binary files /dev/null and b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/logic.vsdx differ diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/sequence.jpg b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/sequence.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44faf01bb3a35a5d7072c8705529f2ef73deecd7 Binary files /dev/null and b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/sequence.jpg differ diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/sequence.vsdx b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/sequence.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..c43b2fe02d509af09eead57cd0180a2e5d5f1567 Binary files /dev/null and b/assignments/src/MV3500Cohort2020JulySeptember/homework3/Weissenberger/sequence.vsdx differ diff --git a/examples/src/HttpServletExamples/HttpWebPageSource.java b/examples/src/HttpServletExamples/HttpWebPageSource.java index c8777424a67e5e70c33f615e936fda8d09faefeb..97166ba5a0593ae53b1276d4e4377f454281d2cc 100644 --- a/examples/src/HttpServletExamples/HttpWebPageSource.java +++ b/examples/src/HttpServletExamples/HttpWebPageSource.java @@ -56,9 +56,9 @@ public class HttpWebPageSource { // But a web server will write an unknown number of lines. // So now we read until the transmisson ends. - InputStream is = socket.getInputStream(); - InputStreamReader isr = new InputStreamReader(is); - BufferedReader br = new BufferedReader(isr); + InputStream is = socket.getInputStream(); + Reader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); String line; int count = 0; @@ -72,8 +72,8 @@ public class HttpWebPageSource { } catch(IOException e) { - System.out.println("HttpWebPageSource: problem with client"); - System.out.println(e); + System.err.println("HttpWebPageSource: problem with client"); + System.err.println(e); } } } diff --git a/examples/src/TcpExamples/TcpExample3Client.java b/examples/src/TcpExamples/TcpExample3Client.java index a5841c8d2804b061eca53741ddd6943b9b660d74..cb346fa0833a42238dbbf1e723314ebbb7980126 100644 --- a/examples/src/TcpExamples/TcpExample3Client.java +++ b/examples/src/TcpExamples/TcpExample3Client.java @@ -22,7 +22,7 @@ public class TcpExample3Client { public static void main(String[] args) { // Local variables/fields - Socket socket; + Socket socket = null; InputStream is; InputStreamReader isr; BufferedReader br; @@ -72,6 +72,11 @@ public class TcpExample3Client { } finally // occurs after any other activity when shutting down { + try { + if (socket != null) + socket.close(); + } catch (IOException e) {} + // program exit: tell somebody about that happening. Likely cause: server drops connection. System.out.println(); System.out.println("TcpExample3Client exit"); diff --git a/examples/src/UdpMulticastExamples/MulticastSender.java b/examples/src/UdpMulticastExamples/MulticastSender.java index ef30a4d4f540144eff6b023d8761e143ab8f7be2..ef698d274c20274df27d411d240bcc451add523f 100644 --- a/examples/src/UdpMulticastExamples/MulticastSender.java +++ b/examples/src/UdpMulticastExamples/MulticastSender.java @@ -3,6 +3,8 @@ package UdpMulticastExamples; import edu.nps.moves.dis7.utilities.DisThreadedNetIF; import java.io.*; import java.net.*; +import java.util.logging.Level; +import java.util.logging.Logger; /** * Looks a lot like UdpSender. Start this after launching MulticastReceiver. @@ -28,11 +30,13 @@ public class MulticastSender { public static final int LOOPSIZE = 20; // 20000 public static final String QUIT_SENTINEL = "QUIT QUIT QUIT!"; + private static NetworkInterface ni; @SuppressWarnings("SleepWhileInLoop") public static void main(String[] args) throws IOException { MulticastSocket multicastSocket = null; + InetSocketAddress group = null; // Put together a message with binary content. "ByteArrayOutputStream" // is a java.io utility that lets us put together an array of binary @@ -51,18 +55,18 @@ public class MulticastSender { System.setProperty("java.net.preferIPv4Stack", "true"); // multicast group we are sending to--not a single host - multicastSocket = new MulticastSocket(DESTINATION_PORT); + multicastSocket = new MulticastSocket(/*DESTINATION_PORT*/); multicastSocket.setTimeToLive(TTL); // time to live reduces scope of transmission InetAddress multicastAddress = InetAddress.getByName(MULTICAST_ADDRESS); System.out.println("Multicast address/port: " + multicastAddress.getHostAddress() + "/" + DESTINATION_PORT); - InetSocketAddress group = new InetSocketAddress(multicastAddress, DESTINATION_PORT); + group = new InetSocketAddress(multicastAddress, DESTINATION_PORT); // Join group useful on receiving side - multicastSocket.joinGroup(group, DisThreadedNetIF.findIpv4Interface()); + multicastSocket.joinGroup(group, ni = DisThreadedNetIF.findIpv4Interface()); // You can join multiple groups here byte[] buffer = baos.toByteArray(); - DatagramPacket packet = new DatagramPacket(buffer, buffer.length, multicastAddress, DESTINATION_PORT); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group/*, DESTINATION_PORT*/); for (int index = 0; index < LOOPSIZE; index++) { @@ -99,8 +103,14 @@ public class MulticastSender { System.err.println(e); } finally { - if (multicastSocket != null) + if (multicastSocket != null && !multicastSocket.isClosed()) { + try { + multicastSocket.leaveGroup(group, ni); + } catch (IOException ex) { + Logger.getLogger(MulticastSender.class.getName()).log(Level.SEVERE, null, ex); + } multicastSocket.close(); + } dos.close(); }