Created
December 21, 2021 05:23
-
-
Save trishagee/de27ff0fff1012852a429d3ed8c207f2 to your computer and use it in GitHub Desktop.
Simple chat server using ServerSocketChannel and the Channels factory methods
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ch15; | |
import java.io.BufferedReader; | |
import java.io.InputStreamReader; | |
import java.io.PrintWriter; | |
import java.net.InetSocketAddress; | |
import java.nio.channels.Channels; | |
import java.nio.channels.ServerSocketChannel; | |
import java.nio.channels.SocketChannel; | |
import java.util.ArrayList; | |
public class SimpleChatServer { | |
ArrayList<PrintWriter> clientOutputStreams; | |
public static void main(String[] args) { | |
new SimpleChatServer().go(); | |
} | |
public void go() { | |
clientOutputStreams = new ArrayList<>(); | |
try { | |
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); | |
serverSocketChannel.bind(new InetSocketAddress("localhost", 5000)); | |
while (true) { | |
SocketChannel clientSocket = serverSocketChannel.accept(); | |
PrintWriter writer = new PrintWriter(Channels.newOutputStream(clientSocket)); | |
clientOutputStreams.add(writer); | |
Thread t = new Thread(new ClientHandler(clientSocket)); | |
t.start(); | |
System.out.println("got a connection"); | |
} | |
} catch (Exception ex) { | |
ex.printStackTrace(); | |
} | |
} // close go | |
public void tellEveryone(String message) { | |
for (PrintWriter writer : clientOutputStreams) { | |
try { | |
writer.println(message); | |
writer.flush(); | |
} catch (Exception ex) { | |
ex.printStackTrace(); | |
} | |
} // end while | |
} // close tellEveryone | |
public class ClientHandler implements Runnable { | |
BufferedReader reader; | |
SocketChannel socket; | |
public ClientHandler(SocketChannel clientSocket) { | |
try { | |
socket = clientSocket; | |
InputStreamReader isReader = new InputStreamReader(Channels.newInputStream(socket)); | |
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 | |
} // close class |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment