From c51767d5d590b2bd2895d2148daaf0e15fefbf33 Mon Sep 17 00:00:00 2001 From: Bruce Eckel Date: Mon, 23 Jan 2017 14:41:17 -0800 Subject: [PATCH] Still refactoring, trying to get them to work right --- network/ChatterClient.java | 2 +- network/ChatterServer.java | 5 +-- network/MultiServer.java | 23 +++++----- network/SimpleClient.java | 28 +++++++----- network/SimpleClient2.java | 43 ------------------- network/SimpleServer.java | 19 ++++---- network/TestMultiServer.java | 5 ++- ...erverClient.java => TestSimpleServer.java} | 4 +- 8 files changed, 48 insertions(+), 81 deletions(-) delete mode 100644 network/SimpleClient2.java rename network/{TestSimpleServerClient.java => TestSimpleServer.java} (85%) diff --git a/network/ChatterClient.java b/network/ChatterClient.java index f8c6462a..c938ead3 100644 --- a/network/ChatterClient.java +++ b/network/ChatterClient.java @@ -42,7 +42,7 @@ public class ChatterClient implements Runnable { } @Override public void run() { - for(int i = 0; i <= 5; i++) + for(int i = 0; i < 10; i++) sendAndEcho( "Client #" + id + ", message #" + i); } diff --git a/network/ChatterServer.java b/network/ChatterServer.java index 3df541c0..11b3c6b1 100644 --- a/network/ChatterServer.java +++ b/network/ChatterServer.java @@ -27,9 +27,8 @@ public class ChatterServer implements Runnable { System.out.println(rcvd); String echoString = "Echoed: " + rcvd; - // Extract the address and port from the - // received datagram to find out where to - // send it back to: + // Extract address and port from received + // datagram and send it back there: DatagramPacket echo = Dgram.toDatagram(echoString, dp.getAddress(), dp.getPort()); diff --git a/network/MultiServer.java b/network/MultiServer.java index 54d005eb..a530cac0 100644 --- a/network/MultiServer.java +++ b/network/MultiServer.java @@ -7,15 +7,16 @@ import java.io.*; import java.net.*; import java.util.concurrent.*; -class ServeOne implements Runnable { - static final int PORT = 8080; +class Serve1 implements Runnable { private ServerSocket ss; - public ServeOne(ServerSocket ss) { + public Serve1(ServerSocket ss) { this.ss = ss; } @Override + public String toString() { return "Serve1: "; } + @Override public void run() { - System.out.println("Starting ServeOne"); + System.out.println(this + "Running"); try ( Socket socket = ss.accept(); BufferedReader in = @@ -31,12 +32,12 @@ class ServeOne implements Runnable { ) { in.lines().anyMatch(message -> { if(message.equals("END")) { - System.out.println( + System.out.println(this + "Received END. Closing Socket."); return true; } System.out.println( - "Message : " + message); + this + "Message: " + message); out.println(message); return false; }); @@ -49,13 +50,15 @@ class ServeOne implements Runnable { public class MultiServer implements Runnable { @Override public void run() { - System.out.println("Running MultiServer"); + System.out.println("Server: Running"); try ( ServerSocket ss = - new ServerSocket(ServeOne.PORT) + new ServerSocket(SimpleClient.PORT) ) { - while(true) - CompletableFuture.runAsync(new ServeOne(ss)); + System.out.println("Server: " + ss); + for(int i = 0; i < 10; i++) + CompletableFuture + .runAsync(new Serve1(ss)); } catch(IOException e) { throw new RuntimeException(e); } diff --git a/network/SimpleClient.java b/network/SimpleClient.java index de144706..e9110f62 100644 --- a/network/SimpleClient.java +++ b/network/SimpleClient.java @@ -2,22 +2,30 @@ // (c)2017 MindView LLC: see Copyright.txt // We make no guarantees that this code is fit for any purpose. // Visit http://OnJava8.com for more book information. -// Sends lines to the server and -// reads lines the server sends. +// Sends to the server, reads from the server import java.net.*; import java.io.*; +import java.util.concurrent.atomic.*; public class SimpleClient implements Runnable { + // Choose a port outside of the range 1-1024: + public static final int PORT = 8080; + private static AtomicInteger idcount = + new AtomicInteger(0); + private final int id = idcount.getAndIncrement(); private InetAddress hostAddress; public SimpleClient(InetAddress hostAddress) { this.hostAddress = hostAddress; } @Override + public String toString() { + return "Client[" + id + "]: "; + } + @Override public void run() { - System.out.println("hostAddress = " + hostAddress); - try ( - Socket socket = - new Socket(hostAddress, SimpleServer.PORT); + System.out.println(this + "Running"); + try( + Socket socket = new Socket(hostAddress, PORT); BufferedReader in = new BufferedReader( new InputStreamReader( @@ -29,11 +37,11 @@ public class SimpleClient implements Runnable { // Enable auto-flush: socket.getOutputStream())), true); ) { - System.out.println("socket: " + socket); + System.out.println(this.toString() + socket); for(int i = 0; i < 10; i ++) { - out.println("hello " + i); - String str = in.readLine(); - System.out.println("client Message : " + str); + out.println(this + "(*" + i + "*)"); + System.out.println(this + + "Received '" + in.readLine() + "'"); } out.println("END"); } catch(IOException e) { diff --git a/network/SimpleClient2.java b/network/SimpleClient2.java deleted file mode 100644 index cdb74722..00000000 --- a/network/SimpleClient2.java +++ /dev/null @@ -1,43 +0,0 @@ -// network/SimpleClient2.java -// (c)2017 MindView LLC: see Copyright.txt -// We make no guarantees that this code is fit for any purpose. -// Visit http://OnJava8.com for more book information. -import java.net.*; -import java.io.*; - -public class SimpleClient2 implements Runnable { - private InetAddress address; - private static int counter = 0; - private int id = counter++; - public SimpleClient2(InetAddress address) { - System.out.println("Making client " + id); - this.address = address; - } - @Override - public void run() { - System.out.println("Running client " + id); - try ( - Socket socket = - new Socket(address, ServeOne.PORT); - BufferedReader in = - new BufferedReader( - new InputStreamReader( - socket.getInputStream())); - PrintWriter out = - new PrintWriter( - new BufferedWriter( - new OutputStreamWriter( - // Enable auto-flush: - socket.getOutputStream())), true) - ) { - for(int i = 0; i < 25; i++) { - out.println("Client " + id + ": " + i); - String str = in.readLine(); - System.out.println(str); - } - out.println("END"); - } catch(IOException ex) { - throw new RuntimeException(ex); - } - } -} diff --git a/network/SimpleServer.java b/network/SimpleServer.java index 73a0b4bd..c58c5c4a 100644 --- a/network/SimpleServer.java +++ b/network/SimpleServer.java @@ -7,12 +7,13 @@ import java.io.*; import java.net.*; public class SimpleServer implements Runnable { - // Choose a port outside of the range 1-1024: - public static final int PORT = 8080; + @Override + public String toString() { return "Server: "; } @Override public void run() { try ( - ServerSocket s = new ServerSocket(PORT); + ServerSocket s = + new ServerSocket(SimpleClient.PORT); // Blocks until a connection occurs: Socket socket = s.accept(); BufferedReader in = @@ -26,16 +27,14 @@ public class SimpleServer implements Runnable { // Enable auto-flush: socket.getOutputStream())), true) ) { - System.out.println("Connection: " + socket); - in.lines().anyMatch(message->{ - if (message.equals("END")) { - System.out.println( + System.out.println(this.toString() + socket); + in.lines().anyMatch(message -> { + if(message.equals("END")) { + System.out.println(this + "Received END. Closing Socket."); return true; } - System.out.println( - "Server Response: " + message); - out.println(message); + out.println(this + message); return false; }); } catch(IOException e) { diff --git a/network/TestMultiServer.java b/network/TestMultiServer.java index 7fbf36e6..f2e018fa 100644 --- a/network/TestMultiServer.java +++ b/network/TestMultiServer.java @@ -9,11 +9,12 @@ import onjava.Nap; public class TestMultiServer { public static void main(String[] args) { CompletableFuture.runAsync(new MultiServer()); + new Nap(1); // Let the server get started for(int i = 0; i < 10; i++) { CompletableFuture.runAsync( - new SimpleClient2(Local.host())); + new SimpleClient(Local.host())); } - new Nap(2); + new Nap(4); // No exceptions mean success } } diff --git a/network/TestSimpleServerClient.java b/network/TestSimpleServer.java similarity index 85% rename from network/TestSimpleServerClient.java rename to network/TestSimpleServer.java index 055be581..abefad70 100644 --- a/network/TestSimpleServerClient.java +++ b/network/TestSimpleServer.java @@ -1,4 +1,4 @@ -// network/TestSimpleServerClient.java +// network/TestSimpleServer.java // (c)2017 MindView LLC: see Copyright.txt // We make no guarantees that this code is fit for any purpose. // Visit http://OnJava8.com for more book information. @@ -6,7 +6,7 @@ import java.net.*; import java.util.concurrent.*; import onjava.Nap; -public class TestSimpleServerClient { +public class TestSimpleServer { public static void main(String[] args) { CompletableFuture.runAsync( new SimpleServer());