SlideShare a Scribd company logo
1 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
core
programming
Network Programming:
Servers
Network Programming: Servers2 www.corewebprogramming.com
Agenda
• Steps for creating a server
1. Create a ServerSocket object
2. Create a Socket object from ServerSocket
3. Create an input stream
4. Create an output stream
5. Do I/O with input and output streams
6. Close the socket
• A generic network server
• Accepting connections from browsers
• Creating an HTTP server
• Adding multithreading to an HTTP server
Network Programming: Servers3 www.corewebprogramming.com
Steps for Implementing a
Server
1. Create a ServerSocket object
ServerSocket listenSocket =
new ServerSocket(portNumber);
2. Create a Socket object from ServerSocket
while(someCondition) {
Socket server = listenSocket.accept();
doSomethingWith(server);
}
• Note that it is quite common to have
doSomethingWith spin off a separate thread
3. Create an input stream to read client input
BufferedReader in =
new BufferedReader
(new InputStreamReader(server.getInputStream()));
Network Programming: Servers4 www.corewebprogramming.com
Steps for Implementing a
Server
4. Create an output stream that can be used
to send info back to the client.
// Last arg of true means autoflush stream
// when println is called
PrintWriter out =
new PrintWriter(server.getOutputStream(), true)
5. Do I/O with input and output Streams
– Most common input: readLine
– Most common output: println
6. Close the socket when done
server.close();
– This closes the associated input and output streams.
Network Programming: Servers5 www.corewebprogramming.com
A Generic Network Server
import java.net.*;
import java.io.*;
/** A starting point for network servers. */
public class NetworkServer {
protected int port, maxConnections;
/** Build a server on specified port. It will continue
* to accept connections (passing each to
* handleConnection) until an explicit exit
* command is sent (e.g. System.exit) or the
* maximum number of connections is reached. Specify
* 0 for maxConnections if you want the server
* to run indefinitely.
*/
public NetworkServer(int port, int maxConnections) {
this.port = port;
this.maxConnections = maxConnections;
}
...
Network Programming: Servers6 www.corewebprogramming.com
A Generic Network Server
(Continued)
/** Monitor a port for connections. Each time one
* is established, pass resulting Socket to
* handleConnection.
*/
public void listen() {
int i=0;
try {
ServerSocket listener = new ServerSocket(port);
Socket server;
while((i++ < maxConnections) ||
(maxConnections == 0)) {
server = listener.accept();
handleConnection(server);
}
} catch (IOException ioe) {
System.out.println("IOException: " + ioe);
ioe.printStackTrace();
}
}
Network Programming: Servers7 www.corewebprogramming.com
A Generic Network Server
(Continued)
...
protected void handleConnection(Socket server)
throws IOException{
BufferedReader in =
SocketUtil.getBufferedReader(server);
PrintWriter out =
SocketUtil.getPrintWriter(server);
System.out.println
("Generic Network Server:n" +
"got connection from " +
server.getInetAddress().getHostName() + "n" +
"with first line '" +
in.readLine() + "'");
out.println("Generic Network Server");
server.close();
}
}
– Override handleConnection to give your server the
behavior you want.
Network Programming: Servers8 www.corewebprogramming.com
Using Network Server
public class NetworkServerTest {
public static void main(String[] args) {
int port = 8088;
if (args.length > 0) {
port = Integer.parseInt(args[0]);
}
NetworkServer server = new NetworkServer(port, 1);
server.listen();
}
}
Network Programming: Servers9 www.corewebprogramming.com
Network Server: Results
• Accepting a Connection from a WWW
Browser
– Suppose the above test program is started up on port 8088
of server.com:
server> java NetworkServerTest
– Then, a standard Web browser on client.com
requests http://server.com:8088/foo/,
yielding the following back on server.com:
Generic Network Server:
got connection from client.com
with first line 'GET /foo/ HTTP/1.0'
Network Programming: Servers10 www.corewebprogramming.com
HTTP Requests and Responses
• Request
GET /~gates/ HTTP/1.0
Header1: …
Header2: …
…
HeaderN: …
Blank Line
– All request headers are
optional except for Host
(required only for HTTP/1.1
requests)
– If you send HEAD instead of
GET, the server returns the
same HTTP headers, but no
document
• Response
HTTP/1.0 200 OK
Content-Type: text/html
Header2: …
…
HeaderN: …
Blank Line
<!DOCTYPE …>
<HTML>
…
</HTML>
– All response headers are
optional except for
Content-Type
Network Programming: Servers11 www.corewebprogramming.com
A Simple HTTP Server
• Idea
1. Read all the lines sent by the browser, storing them in
an array
• Use readLine a line at a time until an empty line
– Exception: with POST requests you have to read
some extra data
2. Send an HTTP response line (e.g. "HTTP/1.0 200 OK")
3. Send a Content-Type line then a blank line
• This indicates the file type being returned
(HTML in this case)
4. Send an HTML file showing the lines that were sent
5. Close the connection
Network Programming: Servers12 www.corewebprogramming.com
EchoServer
import java.net.*;
import java.io.*;
import java.util.StringTokenizer;
/** A simple HTTP server that generates a Web page
* showing all of the data that it received from
* the Web client (usually a browser). */
public class EchoServer extends NetworkServer {
protected int maxInputLines = 25;
protected String serverName = "EchoServer 1.0";
public static void main(String[] args) {
int port = 8088;
if (args.length > 0)
port = Integer.parseInt(args[0]);
EchoServer echoServer = new EchoServer(port, 0);
echoServer.listen();
}
public EchoServer(int port, int maxConnections) {
super(port, maxConnections);
}
Network Programming: Servers13 www.corewebprogramming.com
EchoServer (Continued)
public void handleConnection(Socket server)
throws IOException{
System.out.println(serverName + ": got connection from " +
server.getInetAddress().getHostName());
BufferedReader in = SocketUtil.getBufferedReader(server);
PrintWriter out = SocketUtil.getPrintWriter(server);
String[] inputLines = new String[maxInputLines];
int i;
for (i=0; i<maxInputLines; i++) {
inputLines[i] = in.readLine();
if (inputLines[i] == null) // Client closes connection
break;
if (inputLines[i].length() == 0) { // Blank line
if (usingPost(inputLines)) {
readPostData(inputLines, i, in);
i = i + 2;
}
break;
}
}
...
Network Programming: Servers14 www.corewebprogramming.com
EchoServer (Continued)
printHeader(out);
for (int j=0; j<i; j++)
out.println(inputLines[j]);
printTrailer(out);
server.close();
}
private void printHeader(PrintWriter out) {
out.println("HTTP/1.0 200 Document followsrn" +
"Server: " + serverName + "rn" +
"Content-Type: text/htmlrn" +
"rn" +
"<!DOCTYPE HTML PUBLIC " +
""-//W3C//DTD HTML 4.0//EN">n" +
"<HTML>n" +
...
"</HEAD>n");
}
...
}
Network Programming: Servers15 www.corewebprogramming.com
EchoServer in Action
EchoServer shows data sent by the browser
Network Programming: Servers16 www.corewebprogramming.com
Adding Multithreading
import java.net.*;
import java.io.*;
/** A multithreaded variation of EchoServer. */
public class ThreadedEchoServer extends EchoServer
implements Runnable {
public static void main(String[] args) {
int port = 8088;
if (args.length > 0)
port = Integer.parseInt(args[0]);
ThreadedEchoServer echoServer =
new ThreadedEchoServer(port, 0);
echoServer.serverName = "Threaded Echo Server 1.0";
echoServer.listen();
}
public ThreadedEchoServer(int port, int connections) {
super(port, connections);
}
Network Programming: Servers17 www.corewebprogramming.com
Adding Multithreading
(Continued)
public void handleConnection(Socket server) {
Connection connectionThread =
new Connection(this, server);
connectionThread.start();
}
public void run() {
Connection currentThread =
(Connection)Thread.currentThread();
try {
super.handleConnection(currentThread.serverSocket);
} catch(IOException ioe) {
System.out.println("IOException: " + ioe);
ioe.printStackTrace();
}
}
}
Network Programming: Servers18 www.corewebprogramming.com
Adding Multithreading
(Continued)
/** This is just a Thread with a field to store a
* Socket object. Used as a thread-safe means to pass
* the Socket from handleConnection to run.
*/
class Connection extends Thread {
protected Socket serverSocket;
public Connection(Runnable serverObject,
Socket serverSocket) {
super(serverObject);
this.serverSocket = serverSocket;
}
}
Network Programming: Servers19 www.corewebprogramming.com
Summary
• Create a ServerSocket; specify port number
• Call accept to wait for a client connection
– Once a connection is established, a Socket object is
created to communicate with client
• Browser requests consist of a GET, POST, or
HEAD line followed by a set of request headers
and a blank line
• For the HTTP server response, send the status
line (HTTP/1.0 200 OK), Content-Type, blank
line, and document
• For improved performance, process each
request in a separate thread
20 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
core
programming
Questions?

More Related Content

PPTX
Windows Phone 8 - 9 Push Notifications
PDF
15network Programming Clients
PPTX
Windows Phone 8 - 12 Network Communication
PPTX
Windows Phone 8 - 3.5 Async Programming
PPTX
Windows Phone 8 - 7 Local Database
PDF
Java networking programs socket based
PPT
java networking
PPTX
Windows Phone 8 - 9 Push Notifications
15network Programming Clients
Windows Phone 8 - 12 Network Communication
Windows Phone 8 - 3.5 Async Programming
Windows Phone 8 - 7 Local Database
Java networking programs socket based
java networking

What's hot (17)

PPT
Networking Java Socket Programming
PPT
Pemrograman Jaringan
PPT
Web
ODP
Building interactivity with websockets
PPT
Juglouvain http revisited
ODP
Your app lives on the network - networking for web developers
PPT
Network programming in Java
PDF
HTTP - The Protocol of Our Lives
PDF
Lec 7(HTTP Protocol)
PPTX
Http protocol
PPT
Apache Web Server Setup 3
PDF
Apache Server Tutorial
PPTX
Introduction to HTTP
DOC
T2
PPTX
Apache web service
PPT
Web Server Administration
Networking Java Socket Programming
Pemrograman Jaringan
Web
Building interactivity with websockets
Juglouvain http revisited
Your app lives on the network - networking for web developers
Network programming in Java
HTTP - The Protocol of Our Lives
Lec 7(HTTP Protocol)
Http protocol
Apache Web Server Setup 3
Apache Server Tutorial
Introduction to HTTP
T2
Apache web service
Web Server Administration
Ad

Viewers also liked (20)

KEY
11 protips for smooth web application deployment
PDF
Organizata per Ruajtjen e Zhvillimin e Gjirokastres
PPS
Tri-State Moving Services, General Presentation
DOCX
La toma
PPT
Development And Management Strategy Manik
PDF
Ucrânia em ebulição e suas consequências
PPT
Cocinas antiguas
PPTX
MacroCar Talaver S.L.
PDF
Social media questions marketers need to answer understanding platform
PDF
12advanced Swing
PPS
Happy Easter! Hristos A Inviat!
PPS
Barátság zene
KEY
UX Week 2011 Sketchnotes
PPT
Waiting for Medicare’s Second Stage
PPT
Who Is Val
PPT
1M/1M vs. YCombinator
DOC
Cyberbeegroup2
PPT
Water plants rosi
PDF
Wie man mehr Follower auf Twitter gewinnt
PPTX
User Experience Just Doesn’t Matter
11 protips for smooth web application deployment
Organizata per Ruajtjen e Zhvillimin e Gjirokastres
Tri-State Moving Services, General Presentation
La toma
Development And Management Strategy Manik
Ucrânia em ebulição e suas consequências
Cocinas antiguas
MacroCar Talaver S.L.
Social media questions marketers need to answer understanding platform
12advanced Swing
Happy Easter! Hristos A Inviat!
Barátság zene
UX Week 2011 Sketchnotes
Waiting for Medicare’s Second Stage
Who Is Val
1M/1M vs. YCombinator
Cyberbeegroup2
Water plants rosi
Wie man mehr Follower auf Twitter gewinnt
User Experience Just Doesn’t Matter
Ad

Similar to 16network Programming Servers (20)

PDF
Network Programming Clients
PPT
Socket Programming - nitish nagar
PDF
28 networking
PPT
Socket Programming it-slideshares.blogspot.com
PPT
Sockets
PPTX
Node.js web-based Example :Run a local server in order to start using node.js...
PDF
Web Server and how we can design app in C#
DOCX
Project Assignment 2 Building a Multi-Threaded Web ServerThis pro.docx
PPT
Unit 8 Java
DOCX
MCIS 6163 Assignment 1MCIS 6163 Assignment 1.pdfAssignmen
DOCX
MCIS 6163 Assignment 1MCIS 6163 Assignment 1.pdfAssignmen.docx
DOCX
692015 programming assignment 1 building a multi­threaded w
PDF
11.Open Data Protocol(ODATA)
PPT
Iss letcure 7_8
PPT
Md13 networking
PPTX
Raspberry pi Part 23
DOCX
[Type text]ECET465Project 2Project Assignment 2 Building a Mul.docx
DOCX
Chatting dengan beberapa pc laptop
PPT
Socket Programming
Network Programming Clients
Socket Programming - nitish nagar
28 networking
Socket Programming it-slideshares.blogspot.com
Sockets
Node.js web-based Example :Run a local server in order to start using node.js...
Web Server and how we can design app in C#
Project Assignment 2 Building a Multi-Threaded Web ServerThis pro.docx
Unit 8 Java
MCIS 6163 Assignment 1MCIS 6163 Assignment 1.pdfAssignmen
MCIS 6163 Assignment 1MCIS 6163 Assignment 1.pdfAssignmen.docx
692015 programming assignment 1 building a multi­threaded w
11.Open Data Protocol(ODATA)
Iss letcure 7_8
Md13 networking
Raspberry pi Part 23
[Type text]ECET465Project 2Project Assignment 2 Building a Mul.docx
Chatting dengan beberapa pc laptop
Socket Programming

More from Adil Jafri (20)

PDF
Csajsp Chapter5
PDF
Php How To
PDF
Php How To
PDF
Owl Clock
PDF
Phpcodebook
PDF
Phpcodebook
PDF
Programming Asp Net Bible
PDF
Tcpip Intro
PDF
Jsp Tutorial
PPT
Ta Javaserverside Eran Toch
PDF
Csajsp Chapter10
PDF
Javascript
PDF
Flashmx Tutorials
PDF
Java For The Web With Servlets%2cjsp%2cand Ejb
PDF
Html Css
PDF
Digwc
PDF
Csajsp Chapter12
PDF
Html Frames
PDF
Flash Tutorial
PDF
C Programming
Csajsp Chapter5
Php How To
Php How To
Owl Clock
Phpcodebook
Phpcodebook
Programming Asp Net Bible
Tcpip Intro
Jsp Tutorial
Ta Javaserverside Eran Toch
Csajsp Chapter10
Javascript
Flashmx Tutorials
Java For The Web With Servlets%2cjsp%2cand Ejb
Html Css
Digwc
Csajsp Chapter12
Html Frames
Flash Tutorial
C Programming

Recently uploaded (20)

PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
MYSQL Presentation for SQL database connectivity
PDF
NewMind AI Monthly Chronicles - July 2025
PPT
Teaching material agriculture food technology
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Network Security Unit 5.pdf for BCA BBA.
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
cuic standard and advanced reporting.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Electronic commerce courselecture one. Pdf
PDF
Modernizing your data center with Dell and AMD
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Cloud computing and distributed systems.
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
MYSQL Presentation for SQL database connectivity
NewMind AI Monthly Chronicles - July 2025
Teaching material agriculture food technology
Encapsulation_ Review paper, used for researhc scholars
Network Security Unit 5.pdf for BCA BBA.
The AUB Centre for AI in Media Proposal.docx
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
cuic standard and advanced reporting.pdf
Machine learning based COVID-19 study performance prediction
Electronic commerce courselecture one. Pdf
Modernizing your data center with Dell and AMD
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Empathic Computing: Creating Shared Understanding
Cloud computing and distributed systems.
NewMind AI Weekly Chronicles - August'25 Week I
Digital-Transformation-Roadmap-for-Companies.pptx
Review of recent advances in non-invasive hemoglobin estimation
Building Integrated photovoltaic BIPV_UPV.pdf

16network Programming Servers

  • 1. 1 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com core programming Network Programming: Servers
  • 2. Network Programming: Servers2 www.corewebprogramming.com Agenda • Steps for creating a server 1. Create a ServerSocket object 2. Create a Socket object from ServerSocket 3. Create an input stream 4. Create an output stream 5. Do I/O with input and output streams 6. Close the socket • A generic network server • Accepting connections from browsers • Creating an HTTP server • Adding multithreading to an HTTP server
  • 3. Network Programming: Servers3 www.corewebprogramming.com Steps for Implementing a Server 1. Create a ServerSocket object ServerSocket listenSocket = new ServerSocket(portNumber); 2. Create a Socket object from ServerSocket while(someCondition) { Socket server = listenSocket.accept(); doSomethingWith(server); } • Note that it is quite common to have doSomethingWith spin off a separate thread 3. Create an input stream to read client input BufferedReader in = new BufferedReader (new InputStreamReader(server.getInputStream()));
  • 4. Network Programming: Servers4 www.corewebprogramming.com Steps for Implementing a Server 4. Create an output stream that can be used to send info back to the client. // Last arg of true means autoflush stream // when println is called PrintWriter out = new PrintWriter(server.getOutputStream(), true) 5. Do I/O with input and output Streams – Most common input: readLine – Most common output: println 6. Close the socket when done server.close(); – This closes the associated input and output streams.
  • 5. Network Programming: Servers5 www.corewebprogramming.com A Generic Network Server import java.net.*; import java.io.*; /** A starting point for network servers. */ public class NetworkServer { protected int port, maxConnections; /** Build a server on specified port. It will continue * to accept connections (passing each to * handleConnection) until an explicit exit * command is sent (e.g. System.exit) or the * maximum number of connections is reached. Specify * 0 for maxConnections if you want the server * to run indefinitely. */ public NetworkServer(int port, int maxConnections) { this.port = port; this.maxConnections = maxConnections; } ...
  • 6. Network Programming: Servers6 www.corewebprogramming.com A Generic Network Server (Continued) /** Monitor a port for connections. Each time one * is established, pass resulting Socket to * handleConnection. */ public void listen() { int i=0; try { ServerSocket listener = new ServerSocket(port); Socket server; while((i++ < maxConnections) || (maxConnections == 0)) { server = listener.accept(); handleConnection(server); } } catch (IOException ioe) { System.out.println("IOException: " + ioe); ioe.printStackTrace(); } }
  • 7. Network Programming: Servers7 www.corewebprogramming.com A Generic Network Server (Continued) ... protected void handleConnection(Socket server) throws IOException{ BufferedReader in = SocketUtil.getBufferedReader(server); PrintWriter out = SocketUtil.getPrintWriter(server); System.out.println ("Generic Network Server:n" + "got connection from " + server.getInetAddress().getHostName() + "n" + "with first line '" + in.readLine() + "'"); out.println("Generic Network Server"); server.close(); } } – Override handleConnection to give your server the behavior you want.
  • 8. Network Programming: Servers8 www.corewebprogramming.com Using Network Server public class NetworkServerTest { public static void main(String[] args) { int port = 8088; if (args.length > 0) { port = Integer.parseInt(args[0]); } NetworkServer server = new NetworkServer(port, 1); server.listen(); } }
  • 9. Network Programming: Servers9 www.corewebprogramming.com Network Server: Results • Accepting a Connection from a WWW Browser – Suppose the above test program is started up on port 8088 of server.com: server> java NetworkServerTest – Then, a standard Web browser on client.com requests http://server.com:8088/foo/, yielding the following back on server.com: Generic Network Server: got connection from client.com with first line 'GET /foo/ HTTP/1.0'
  • 10. Network Programming: Servers10 www.corewebprogramming.com HTTP Requests and Responses • Request GET /~gates/ HTTP/1.0 Header1: … Header2: … … HeaderN: … Blank Line – All request headers are optional except for Host (required only for HTTP/1.1 requests) – If you send HEAD instead of GET, the server returns the same HTTP headers, but no document • Response HTTP/1.0 200 OK Content-Type: text/html Header2: … … HeaderN: … Blank Line <!DOCTYPE …> <HTML> … </HTML> – All response headers are optional except for Content-Type
  • 11. Network Programming: Servers11 www.corewebprogramming.com A Simple HTTP Server • Idea 1. Read all the lines sent by the browser, storing them in an array • Use readLine a line at a time until an empty line – Exception: with POST requests you have to read some extra data 2. Send an HTTP response line (e.g. "HTTP/1.0 200 OK") 3. Send a Content-Type line then a blank line • This indicates the file type being returned (HTML in this case) 4. Send an HTML file showing the lines that were sent 5. Close the connection
  • 12. Network Programming: Servers12 www.corewebprogramming.com EchoServer import java.net.*; import java.io.*; import java.util.StringTokenizer; /** A simple HTTP server that generates a Web page * showing all of the data that it received from * the Web client (usually a browser). */ public class EchoServer extends NetworkServer { protected int maxInputLines = 25; protected String serverName = "EchoServer 1.0"; public static void main(String[] args) { int port = 8088; if (args.length > 0) port = Integer.parseInt(args[0]); EchoServer echoServer = new EchoServer(port, 0); echoServer.listen(); } public EchoServer(int port, int maxConnections) { super(port, maxConnections); }
  • 13. Network Programming: Servers13 www.corewebprogramming.com EchoServer (Continued) public void handleConnection(Socket server) throws IOException{ System.out.println(serverName + ": got connection from " + server.getInetAddress().getHostName()); BufferedReader in = SocketUtil.getBufferedReader(server); PrintWriter out = SocketUtil.getPrintWriter(server); String[] inputLines = new String[maxInputLines]; int i; for (i=0; i<maxInputLines; i++) { inputLines[i] = in.readLine(); if (inputLines[i] == null) // Client closes connection break; if (inputLines[i].length() == 0) { // Blank line if (usingPost(inputLines)) { readPostData(inputLines, i, in); i = i + 2; } break; } } ...
  • 14. Network Programming: Servers14 www.corewebprogramming.com EchoServer (Continued) printHeader(out); for (int j=0; j<i; j++) out.println(inputLines[j]); printTrailer(out); server.close(); } private void printHeader(PrintWriter out) { out.println("HTTP/1.0 200 Document followsrn" + "Server: " + serverName + "rn" + "Content-Type: text/htmlrn" + "rn" + "<!DOCTYPE HTML PUBLIC " + ""-//W3C//DTD HTML 4.0//EN">n" + "<HTML>n" + ... "</HEAD>n"); } ... }
  • 15. Network Programming: Servers15 www.corewebprogramming.com EchoServer in Action EchoServer shows data sent by the browser
  • 16. Network Programming: Servers16 www.corewebprogramming.com Adding Multithreading import java.net.*; import java.io.*; /** A multithreaded variation of EchoServer. */ public class ThreadedEchoServer extends EchoServer implements Runnable { public static void main(String[] args) { int port = 8088; if (args.length > 0) port = Integer.parseInt(args[0]); ThreadedEchoServer echoServer = new ThreadedEchoServer(port, 0); echoServer.serverName = "Threaded Echo Server 1.0"; echoServer.listen(); } public ThreadedEchoServer(int port, int connections) { super(port, connections); }
  • 17. Network Programming: Servers17 www.corewebprogramming.com Adding Multithreading (Continued) public void handleConnection(Socket server) { Connection connectionThread = new Connection(this, server); connectionThread.start(); } public void run() { Connection currentThread = (Connection)Thread.currentThread(); try { super.handleConnection(currentThread.serverSocket); } catch(IOException ioe) { System.out.println("IOException: " + ioe); ioe.printStackTrace(); } } }
  • 18. Network Programming: Servers18 www.corewebprogramming.com Adding Multithreading (Continued) /** This is just a Thread with a field to store a * Socket object. Used as a thread-safe means to pass * the Socket from handleConnection to run. */ class Connection extends Thread { protected Socket serverSocket; public Connection(Runnable serverObject, Socket serverSocket) { super(serverObject); this.serverSocket = serverSocket; } }
  • 19. Network Programming: Servers19 www.corewebprogramming.com Summary • Create a ServerSocket; specify port number • Call accept to wait for a client connection – Once a connection is established, a Socket object is created to communicate with client • Browser requests consist of a GET, POST, or HEAD line followed by a set of request headers and a blank line • For the HTTP server response, send the status line (HTTP/1.0 200 OK), Content-Type, blank line, and document • For improved performance, process each request in a separate thread
  • 20. 20 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com core programming Questions?