0% found this document useful (0 votes)
147 views3 pages

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)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
147 views3 pages

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)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

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 [Link] team. Honeypot: spam@[Link] package sample_server; import [Link].*; import [Link].*; import [Link].*; /** * 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 [Link] * Copyright: Copyright (c) 2002 * Company: [Link] * @author B. Kieser * @version 1.0 */ public class sample_server { private static int port=4444, maxConnections=0;
[Link]/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 = [Link](); doComms conn_c= new doComms(server); Thread t = new Thread(conn_c); [Link](); } } catch (IOException ioe) { [Link]("IOException on socket listen: " + ioe); [Link](); } } } class doComms implements Runnable { private Socket server; private String line,input; doComms(Socket server) { [Link]=server; } public void run () { input=""; try { // Get input from the client DataInputStream in = new DataInputStream ([Link]()); PrintStream out = new PrintStream([Link]()); while((line = [Link]()) != null && ![Link](".")) { input=input + line; [Link]("I got:" + line); }
[Link]/linux/java_server.html 2/3

29/12/2009

A multi-threaded socket-based Java se

// Now write to the client [Link]("Overall message is:" + input); [Link]("Overall message is:" + input); [Link](); } catch (IOException ioe) { [Link]("IOException on socket listen: " + ioe); [Link](); } } }

[Link]/linux/java_server.html

3/3

You might also like