Skip to content

Instantly share code, notes, and snippets.

@trishagee
Created December 21, 2021 05:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trishagee/de27ff0fff1012852a429d3ed8c207f2 to your computer and use it in GitHub Desktop.
Save trishagee/de27ff0fff1012852a429d3ed8c207f2 to your computer and use it in GitHub Desktop.
Simple chat server using ServerSocketChannel and the Channels factory methods
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