Some formatting gets lost while pasting this here, original: http://www.elhalf.com/Project.java
Could be used maybe as a base for a msn alike thing. You'd have to use multithreading then though.
Code:/*Waits for a client to connect on port 23, then if the client enters the string 'findhost' a new socket starts listening on port 24, when second host is connected incoming traffic is being forwarded to the other host (hence it acts as a gateway between those 2 hosts). */ import java.net.*; import java.io.*; public class Project extends Thread { ServerSocket server; int PORTNUM = 23; public static BufferedReader reader; public static PrintWriter writer; public Project() { super("Project"); try { server = new ServerSocket(PORTNUM); System.out.println("Project is running on port " + PORTNUM); } catch (IOException e) { System.err.println("Exception: " + e.toString()); System.exit(1); } } public static void main(String[] args) { Project project = new Project(); project.start(); } public void run() { Socket client = null; while(true) { if (server == null) return; try { client = server.accept(); } catch (IOException e) { System.err.println("Exception" + e.toString()); System.exit(1); } try { InputStreamReader inputstream = new InputStreamReader(client.getInputStream()); reader = new BufferedReader(inputstream); writer = new PrintWriter(new BufferedOutputStream(client.getOutputStream()), false); writer.println("You are now connected to the Project server..."); writer.flush(); while (true) { String inLine = reader.readLine(); System.out.println("Client1: " + inLine); if (inLine.equalsIgnoreCase("findhost")) { WaitForSecond second = new WaitForSecond(); second.start(); while (true) { String publicLine = reader.readLine(); System.out.println("Client1: " + publicLine); if (publicLine.equalsIgnoreCase("quit")) { writer.close(); reader.close(); client.close(); break; } second.writer.println("Client: " + publicLine); second.writer.flush(); } } } } catch (Exception e) { System.err.println("Exception: " + e.toString()); e.printStackTrace(); } } } } class WaitForSecond extends Thread { ServerSocket server; int PORTNUM = 24; public static BufferedReader reader; public static PrintWriter writer; public WaitForSecond() { super("WaitForSecond"); try { server = new ServerSocket(PORTNUM); System.out.println("Waiting for second host on port " + PORTNUM); Project.writer.println("Server is waiting for second host to connect..."); } catch (IOException e) { System.err.println("Exception: " + e.toString()); System.exit(1); } } public void run() { Socket client = null; while(true) { if (server == null) return; try { client = server.accept(); } catch (IOException e) { System.err.println("Exception: " + e.toString()); System.exit(1); } try { InputStreamReader inputstream = new InputStreamReader(client.getInputStream()); reader = new BufferedReader(inputstream); writer = new PrintWriter(new BufferedOutputStream(client.getOutputStream()), false); writer.println("You are connected to the Project server..."); writer.flush(); writer.println("You are the second host, you are now connected to host1"); writer.flush(); Project.writer.println("You are now connected to host2"); Project.writer.flush(); while(true) { String newinLine = reader.readLine(); if (newinLine.equalsIgnoreCase("quit")) { writer.close(); reader.close(); client.close(); break; } System.out.println("Client2: " + newinLine); Project.writer.println("Client: " + newinLine); Project.writer.flush(); } } catch (Exception e) { System.err.println("Exception: " + e.toString()); System.exit(1); } } } }




Reply With Quote