Loading src/main/java/ch15/SimpleChatClient.java +19 −18 Changes for src/main/java/ch15/SimpleChatClient.java: 19 added lines, 18 removed lines. Original line number Diff line number Diff line Loading @@ -4,15 +4,17 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class SimpleChatClient { private JTextArea incoming; private JTextField outgoing; private SocketChannel socketChannel; private BufferedReader reader; private PrintWriter writer; public static void main(String[] args) { new SimpleChatClient().go(); Loading Loading @@ -44,10 +46,10 @@ public class SimpleChatClient { private void setUpNetworking() { try { InetSocketAddress address = new InetSocketAddress("localhost", 5000); this.socketChannel = SocketChannel.open(address); Socket sock = new Socket("127.0.0.1", 5000); InputStreamReader streamReader = new InputStreamReader(sock.getInputStream()); reader = new BufferedReader(streamReader); writer = new PrintWriter(sock.getOutputStream()); System.out.println("networking established"); } catch (IOException ex) { ex.printStackTrace(); Loading @@ -57,10 +59,8 @@ public class SimpleChatClient { public class SendButtonListener implements ActionListener { public void actionPerformed(ActionEvent ev) { try { String message = outgoing.getText(); System.out.println(message); ByteBuffer buffer = ByteBuffer.wrap(message.getBytes()); socketChannel.write(buffer); writer.println(outgoing.getText()); writer.flush(); } catch (Exception ex) { ex.printStackTrace(); } Loading @@ -71,14 +71,15 @@ public class SimpleChatClient { public class IncomingReader implements Runnable { public void run() { ByteBuffer buffer = ByteBuffer.allocate(256); String message; try { socketChannel.read(buffer); } catch (IOException e) { e.printStackTrace(); while ((message = reader.readLine()) != null) { System.out.println("read " + message); incoming.append(message + "\n"); } // close while } catch (Exception ex) { ex.printStackTrace(); } String result = new String(buffer.array()).trim(); incoming.append(result); } // close run } // close inner class } // close outer class No newline at end of file src/main/java/ch15/SimpleChatServer.java +44 −46 Changes for src/main/java/ch15/SimpleChatServer.java: 44 added lines, 46 removed lines. Original line number Diff line number Diff line package ch15; import java.io.BufferedReader; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Iterator; public class SimpleChatServer { private ArrayList<SocketChannel> clients; ArrayList<PrintWriter> clientOutputStreams; public class ClientHandler implements Runnable { BufferedReader reader; Socket sock; public ClientHandler(Socket clientSocket) { try { sock = clientSocket; InputStreamReader isReader = new InputStreamReader(sock.getInputStream()); reader = new BufferedReader(isReader); } catch (Exception ex) { ex.printStackTrace(); } } // close constructor public void run() { String message; try { while ((message = reader.readLine()) != null) { System.out.println("read " + message); tellEveryone(message); } // close while } catch (Exception ex) { ex.printStackTrace(); } } // close run } // close inner class public static void main(String[] args) { new SimpleChatServer().go(); } public void go() { clients = new ArrayList<>(); clientOutputStreams = new ArrayList<>(); try { ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); InetSocketAddress address = new InetSocketAddress("127.0.0.1", 5000); serverSocketChannel.bind(address); while (serverSocketChannel.isOpen()) { SocketChannel socketChannel = serverSocketChannel.accept(); clients.add(socketChannel); Thread t = new Thread(new ClientHandler(socketChannel)); ServerSocket serverSock = new ServerSocket(5000); while (true) { Socket clientSocket = serverSock.accept(); PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); clientOutputStreams.add(writer); Thread t = new Thread(new ClientHandler(clientSocket)); t.start(); System.out.println("got a connection"); } Loading @@ -36,41 +59,16 @@ public class SimpleChatServer { } } // close go public class ClientHandler implements Runnable { SocketChannel socketChannel; public ClientHandler(SocketChannel socketChannel) { this.socketChannel = socketChannel; } public void run() { ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.clear(); try { int read = socketChannel.read(buffer); System.out.println(read); ByteBuffer byteBuffer = buffer.flip(); tellEveryone(byteBuffer); System.out.println("told"); } catch (IOException e) { e.printStackTrace(); } } // close run public void tellEveryone(ByteBuffer byteBuffer) { Iterator<SocketChannel> it = clients.iterator(); public void tellEveryone(String message) { Iterator<PrintWriter> it = clientOutputStreams.iterator(); while (it.hasNext()) { try { SocketChannel channel = it.next(); while(byteBuffer.hasRemaining()) { channel.write(byteBuffer); } PrintWriter writer = it.next(); writer.println(message); writer.flush(); } catch (Exception ex) { ex.printStackTrace(); } } // end while } // close tellEveryone } // close ClientHandler } // close class No newline at end of file Loading
src/main/java/ch15/SimpleChatClient.java +19 −18 Changes for src/main/java/ch15/SimpleChatClient.java: 19 added lines, 18 removed lines. Original line number Diff line number Diff line Loading @@ -4,15 +4,17 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class SimpleChatClient { private JTextArea incoming; private JTextField outgoing; private SocketChannel socketChannel; private BufferedReader reader; private PrintWriter writer; public static void main(String[] args) { new SimpleChatClient().go(); Loading Loading @@ -44,10 +46,10 @@ public class SimpleChatClient { private void setUpNetworking() { try { InetSocketAddress address = new InetSocketAddress("localhost", 5000); this.socketChannel = SocketChannel.open(address); Socket sock = new Socket("127.0.0.1", 5000); InputStreamReader streamReader = new InputStreamReader(sock.getInputStream()); reader = new BufferedReader(streamReader); writer = new PrintWriter(sock.getOutputStream()); System.out.println("networking established"); } catch (IOException ex) { ex.printStackTrace(); Loading @@ -57,10 +59,8 @@ public class SimpleChatClient { public class SendButtonListener implements ActionListener { public void actionPerformed(ActionEvent ev) { try { String message = outgoing.getText(); System.out.println(message); ByteBuffer buffer = ByteBuffer.wrap(message.getBytes()); socketChannel.write(buffer); writer.println(outgoing.getText()); writer.flush(); } catch (Exception ex) { ex.printStackTrace(); } Loading @@ -71,14 +71,15 @@ public class SimpleChatClient { public class IncomingReader implements Runnable { public void run() { ByteBuffer buffer = ByteBuffer.allocate(256); String message; try { socketChannel.read(buffer); } catch (IOException e) { e.printStackTrace(); while ((message = reader.readLine()) != null) { System.out.println("read " + message); incoming.append(message + "\n"); } // close while } catch (Exception ex) { ex.printStackTrace(); } String result = new String(buffer.array()).trim(); incoming.append(result); } // close run } // close inner class } // close outer class No newline at end of file
src/main/java/ch15/SimpleChatServer.java +44 −46 Changes for src/main/java/ch15/SimpleChatServer.java: 44 added lines, 46 removed lines. Original line number Diff line number Diff line package ch15; import java.io.BufferedReader; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Iterator; public class SimpleChatServer { private ArrayList<SocketChannel> clients; ArrayList<PrintWriter> clientOutputStreams; public class ClientHandler implements Runnable { BufferedReader reader; Socket sock; public ClientHandler(Socket clientSocket) { try { sock = clientSocket; InputStreamReader isReader = new InputStreamReader(sock.getInputStream()); reader = new BufferedReader(isReader); } catch (Exception ex) { ex.printStackTrace(); } } // close constructor public void run() { String message; try { while ((message = reader.readLine()) != null) { System.out.println("read " + message); tellEveryone(message); } // close while } catch (Exception ex) { ex.printStackTrace(); } } // close run } // close inner class public static void main(String[] args) { new SimpleChatServer().go(); } public void go() { clients = new ArrayList<>(); clientOutputStreams = new ArrayList<>(); try { ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); InetSocketAddress address = new InetSocketAddress("127.0.0.1", 5000); serverSocketChannel.bind(address); while (serverSocketChannel.isOpen()) { SocketChannel socketChannel = serverSocketChannel.accept(); clients.add(socketChannel); Thread t = new Thread(new ClientHandler(socketChannel)); ServerSocket serverSock = new ServerSocket(5000); while (true) { Socket clientSocket = serverSock.accept(); PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); clientOutputStreams.add(writer); Thread t = new Thread(new ClientHandler(clientSocket)); t.start(); System.out.println("got a connection"); } Loading @@ -36,41 +59,16 @@ public class SimpleChatServer { } } // close go public class ClientHandler implements Runnable { SocketChannel socketChannel; public ClientHandler(SocketChannel socketChannel) { this.socketChannel = socketChannel; } public void run() { ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.clear(); try { int read = socketChannel.read(buffer); System.out.println(read); ByteBuffer byteBuffer = buffer.flip(); tellEveryone(byteBuffer); System.out.println("told"); } catch (IOException e) { e.printStackTrace(); } } // close run public void tellEveryone(ByteBuffer byteBuffer) { Iterator<SocketChannel> it = clients.iterator(); public void tellEveryone(String message) { Iterator<PrintWriter> it = clientOutputStreams.iterator(); while (it.hasNext()) { try { SocketChannel channel = it.next(); while(byteBuffer.hasRemaining()) { channel.write(byteBuffer); } PrintWriter writer = it.next(); writer.println(message); writer.flush(); } catch (Exception ex) { ex.printStackTrace(); } } // end while } // close tellEveryone } // close ClientHandler } // close class No newline at end of file