You are on page 1of 18

TCP/IP Protocol Stack

Application

Sockets (Gate to network)

TCP IP

UDP

TCP: Establish connection Maintain connection during the communication Release connection Reliable (Acknowledged, in order) UDP: No need to setup a link Independent packets Not reliable (no acknowledgement)

Device Drivers

Programming with Sockets


Sockets are Berkeley software distribution UNIX interface to network protocols Endpoint of communication, has a type and one associated process Uses file system model (open-close-read-write) Internet vs. Unix domain

Client-Server Architecture
request client response Host: www.vcu.edu Port: 80 Process request

4 steps in programming a client


Open a socket. Open an input and output stream to the socket. Read from and write to the socket according to the server's protocol. Clean up.

Socket in Java
Two important classes
Socket: a normal socket as communication end ServerSocket: accept the incoming request

ServerSocket is an analogy to the custom service phone number, it will dispatch your call to a specialized staff--- normal Socket.

Client Socket Creation


Socket MyClient; MyClient = new Socket("Machine name", PortNumber);
SOCKET DESCRIPTOR

the machine you are trying to open a connection to

port (a number) on which the server you want

port numbers between 0 and 1,023 are reserved for for standard services, such as email, FTP, and HTTP. for your server, select one that is greater than 1,023

Create Server Socket


If you are programming a server, then this is how you open a socket: ServerSocket MyService; try { MyServerice = new ServerSocket(PortNumber); } catch (IOException e) { System.out.println(e); }

Use ServerSocket: listen, accept, and Create connections from clients.


Socket clientSocket = null; try { serviceSocket = MyService.accept(); } catch (IOException e) { A blocking call, will return when a System.out.println(e); request arrive }

Send Data to Socket at Client


PrintStream output; try { output = new PrintStream(MyClient.getOutputStream()); String inL=hello; output.writeBytes(inL+"\n"); }

Read data from Socket at Client


DataInputStream input; try { input = new DataInputStream(MyClient.getInputStream()); .. String responseLine = input.readLine(); System.out.println("Server: " + responseLine); }

Send Data to Socket at Server


Use the serviceSocket: returned from the accept() call. PrintStream output;
try { output = new PrintStream(serviceSocket.getOutputStream()); output.println(this is server reply); }

Read Data From Socket at Server


Same as client case DataInputStream input; try { input = new DataInputStream(serviceSocket.getInputStream()) ; String req=input.readLine(); }

Close Socket Connection


On the client side: try { output.close(); input.close(); MyClient.close(); } catch (IOException e) { System.out.println(e) ; } On the server side: try { output.close(); input.close(); serviceSocket.close(); MyService.close(); } catch (IOException e) { System.out.println(e); }

A Simple Echo Server


import java.io.*; import java.net.*; public class echo3 { public static void main(String args[]) { ServerSocket echoServer = null; String line; DataInputStream is; PrintStream os; Socket clientSocket = null; try { echoServer = new ServerSocket(9999); } catch (IOException e) { System.out.println(e); } // listen and accept connections. // Open input and output streams try { clientSocket = echoServer.accept(); is = new DataInputStream (clientSocket.getInputStream()); os = new PrintStream (clientSocket.getOutputStream()); // As long as we receive data, echo that data back to the client. while (true) { line = is.readLine(); os.println(line); } } catch (IOException e) { System.out.println(e); } } }

A simple client
smtpSocket = new Socket("128.172.167.167", 9998); os = new DataOutputStream(smtpSocket.getOu tputStream()); is = new DataInputStream(smtpSocket.getInpu tStream()); while (true){ inL=d.readLine(); os.writeBytes(inL+"\n"); if (inL.compareTo("quit")==0) break; // keep on reading from/to the socket till we receive the "Ok" from SMTP, // once we received that then we want to break. responseLine = is.readLine(); System.out.println("Server: " + responseLine); responseLine = is.readLine(); System.out.println("Server: " + responseLine); responseLine = is.readLine(); System.out.println("Server: " + responseLine); }

Reference
Class ServerSocke
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. accept() Listens for a connection to be made to this socket and accepts it. getInetAddress()
Returns the local address of this server socket.

Class Socket
This class implements client sockets (also called just "sockets"). A socket is an endpoint for communication between two machines. Socket(InetAddress address, int port) connect(SocketAddress endpoint) Connects this socket to the server. getPort() Returns the remote port to which this socket is connected. getLocalPort() Returns the local port to which this socket is bound. getInputStream() Returns an input stream for this socket. getOutputStream() Returns an output stream for this socket. getInetAddress() Returns the address to which the socket is connected. getLocalAddress() Gets the local address to which the socket is bound.

Other Parameters in Socket


Buffer size
Incoming buffer size Outgoing buffer size

Time out or not


Otherwise a bad read will block your browser for ever.

Status check

You might also like