CPSC 441 TCP Socket Programming Server Department of

  • Slides: 11
Download presentation
CPSC 441 TCP Socket Programming: Server Department of Computer Science University of Calgary

CPSC 441 TCP Socket Programming: Server Department of Computer Science University of Calgary

In this tutorial… v Basic TCP Server § New: Server. Socket(); § New: server.

In this tutorial… v Basic TCP Server § New: Server. Socket(); § New: server. Socket. accept(); v v Iterative TCP Server Multithreaded TCP Server CPSC 441 - Server 2

What is a Server Socket? v From the Oracle docs… § A server socket

What is a Server Socket? v From the Oracle docs… § A server socket waits for requests to come in over the network. It performs some operation based on that request, and then possibly returns a result to the requester. § Found in: java. net. Server. Socket v A server socket accepts a connection from a client. § Server. Socket#accept() - Listens for a connection to be made to this socket and accepts it. The method blocks until a connection is made. v Overall process for creating a server: § Create a Server. Socket instance, which is bound to a port • Server. Socket serv. Sock = Server. Socket(port); § Accept a connection from a client, and get a Socket referring to that connection • Socket sock = serv. Sock. accept(); § Perform operations with socket CPSC 441 - Server 3

Basic TCP Server Create new instance of Server. Socket in try-with-resources block; listen on

Basic TCP Server Create new instance of Server. Socket in try-with-resources block; listen on port 8888 public class TCPServer { public static void main(String[] args) { try( Server. Socket server. Socket = new Server. Socket(8888); Socket socket = server. Socket. accept(); Connected to client hereafter ){ Create streams Print. Writer output. Stream = new Print. Writer( new Data. Output. Stream(socket. get. Output. Stream()) ); Scanner input. Stream = new Scanner( new Input. Stream. Reader(socket. get. Input. Stream()) ); CPSC 441 - Server 4

Basic TCP Server (Contd. ) Receive message from client and respond; terminate if message

Basic TCP Server (Contd. ) Receive message from client and respond; terminate if message is "bye" while(true) { String s = input. Stream. next. Line(); System. out. println(s); if(s. equals. Ignore. Case("bye")) { output. Stream. println("bye"); output. Stream. flush(); break; } output. Stream. println(s); output. Stream. flush(); } } catch (Exception e) { System. out. println("Error: " + e. get. Message()); } } } CPSC 441 - Server 5

Drawbacks of Basic TCP Server v After a connection is terminated with a client,

Drawbacks of Basic TCP Server v After a connection is terminated with a client, the server exits v Solution: Add a while loop Accept client connection requests sequentially v v v Assume that when a client is connected, no other client tries to connect with the server (i. e. , first come, first served) This is then an iterative server CPSC 441 - Server 6

Iterative Server Create new instance of Server. Socket in try-with-resources block; listen on port

Iterative Server Create new instance of Server. Socket in try-with-resources block; listen on port 8888 public class TCPServer { public static void main(String[] args) { try (Server. Socket server. Socket = new Server. Socket(8888)) { while(true) { Connected to Socket socket = server. Socket. accept(); client hereafter Print. Writer output. Stream = new Print. Writer( socket. get. Output. Stream() Create ); streams Scanner input. Stream = new Scanner( new Input. Stream. Reader(socket. get. Input. Stream()) ); CPSC 441 - Server 7

Iterative Server (Contd. ) while(true) { String s = input. Stream. next. Line(); System.

Iterative Server (Contd. ) while(true) { String s = input. Stream. next. Line(); System. out. println(s); if(s. equals. Ignore. Case("bye")) { Receive message output. Stream. println("bye"); from client and output. Stream. flush(); respond; terminate break; if message is "bye" } output. Stream. println(s); output. Stream. flush(); } } //end of Inner While } // end of Outer While catch (Exception e) { System. out. println("Error: " + e. get. Message()); } } } CPSC 441 - Server 8

Iterative Server - Drawbacks v v Cannot handle multiple clients simultaneously All clients have

Iterative Server - Drawbacks v v Cannot handle multiple clients simultaneously All clients have to wait in line to be served Servers can handle many more clients than just 1 at a time! Solution: Use threads v v This is a multi-threaded server Used in practice CPSC 441 - Server 9

Multithreaded Server Create new instance of Server. Socket in try-with-resources block; listen on port

Multithreaded Server Create new instance of Server. Socket in try-with-resources block; listen on port PORT_NUMBER public class TCPServer { private static final int PORT_NUMBER = 8888; public static void main(String[] args) { try (Server. Socket server. Socket = new Server. Socket(PORT_NUMBER)) { System. out. println("Listening. "); while (true) { Socket client. Socket = server. Socket. accept(); Start listening on Server is the name System. out. println("Accepted. "); the port, accept a of our Runnable, connection and Server server = new Server(client. Socket); not a Java builtin create a thread for Thread thread = new Thread(server); that connection thread. start(); } } catch(Exception e) { System. out. println("Error: " + e. get. Message()); } } } CPSC 441 - Server 10

Multithreaded Server (Contd. ) public void run() { //in Runnable "Server" try ( Print.

Multithreaded Server (Contd. ) public void run() { //in Runnable "Server" try ( Print. Writer output. Stream = new Print. Writer(socket. get. Output. Stream(), true); Scanner input. Stream = new Scanner(new Input. Stream. Reader(socket. get. Input. Stream())); ){ while (true) { auto. Flush enabled obviates the need to String s = input. Stream. next. Line(); call flush() here because of println() System. out. println(s); if(s. equals. Ignore. Case("bye")) { Receive message from client and respond; output. Stream. println("bye"); terminate if message is "bye" break; } output. Stream. println(s); } } catch(Exception e){ System. out. println(e. get. Message()); } CPSC 441 - Server 11 }