0% found this document useful (0 votes)
108 views

A Multi-Threaded Socket-Based Java Server

This document provides code for a multi-threaded socket-based Java server that accepts client connections on port 4444 and echoes input received back to each client until a full stop is received, at which point it closes the connection. The server avoids race conditions by starting a new thread for each client connection and implements reading and writing to clients.

Uploaded by

Oliver Zakaria
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
108 views

A Multi-Threaded Socket-Based Java Server

This document provides code for a multi-threaded socket-based Java server that accepts client connections on port 4444 and echoes input received back to each client until a full stop is received, at which point it closes the connection. The server avoids race conditions by starting a new thread for each client connection and implements reading and writing to clients.

Uploaded by

Oliver Zakaria
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

29/12/2009

A multi-threaded socket-based Java se

A multi-threaded socket-based server


The problem is old - How to implement a multi-threaded, socket-based server that will let you read and write to the client (for example a telnet terminal. There are several problems with constructing such a server:

1. You have to use threads because otherwise clients will be queued up waiting for a connection. 2. Many of the publically available examples (even some in some books) do not work for I/O servers. They are mostly developed around reading from a socket not writing to the socket as well. In our example we give a working read/write code example. 3. You need to avoid race conditions when starting up a thread at times when connections are coming through thick and fast. The code below will implement just such a server. It is intended for a head start, so is a template rather than a tutorial on how to write a server in Java. We have decided on port 4444 to listen on in the example, but you need to decide on a suitable port yourself. The server will run, establishing connections from the port and echoing input received until it receives a line of input that is a full stop only ".". Have fun! The Kieser.net team. Honeypot: [email protected] package sample_server; import java.io.*; import java.net.*; import java.security.*; /** * Title: Sample Server * Description: This utility will accept input from a socket, posting back to the socket before closing the link. * It is intended as a template for coders to base servers on. Please report bugs to brad at kieser.net * Copyright: Copyright (c) 2002 * Company: Kieser.net * @author B. Kieser * @version 1.0 */ public class sample_server { private static int port=4444, maxConnections=0;
www.kieser.net/linux/java_server.html 1/3

29/12/2009

A multi-threaded socket-based Java se

// Listen for incoming connections and handle them public static void main(String[] args) { int i=0; try{ ServerSocket listener = new ServerSocket(port); Socket server; while((i++ < maxConnections) || (maxConnections == 0)){ doComms connection; server = listener.accept(); doComms conn_c= new doComms(server); Thread t = new Thread(conn_c); t.start(); } } catch (IOException ioe) { System.out.println("IOException on socket listen: " + ioe); ioe.printStackTrace(); } } } class doComms implements Runnable { private Socket server; private String line,input; doComms(Socket server) { this.server=server; } public void run () { input=""; try { // Get input from the client DataInputStream in = new DataInputStream (server.getInputStream()); PrintStream out = new PrintStream(server.getOutputStream()); while((line = in.readLine()) != null && !line.equals(".")) { input=input + line; out.println("I got:" + line); }
www.kieser.net/linux/java_server.html 2/3

29/12/2009

A multi-threaded socket-based Java se

// Now write to the client System.out.println("Overall message is:" + input); out.println("Overall message is:" + input); server.close(); } catch (IOException ioe) { System.out.println("IOException on socket listen: " + ioe); ioe.printStackTrace(); } } }

www.kieser.net/linux/java_server.html

3/3

You might also like