Title: Programming TCP Clients
1Programming TCP Clients
2InetAddress Class
- An IP address identifies uniquely a host in the
internet, which consists of 4 numbers (1 byte
each one) in the IPV4. The InetAddress class is
an object which store such type of data and has
some functions to get the host name from the IP
number or vice-versa - It has no constructors, but an object factory. A
new object of this class is created with - InetAddress n InetAddress.getLocalHost()
- InetAddress n InetAddress.getByName(nombre)
- Following methods can be applied
- String nombre n.getHostName()
- String direccion n.getHostAddress()
- See InetExample.java Names.java
3(No Transcript)
4The URL class
- URL Uniform Resource Locator
- It is used to connect to a web server and donload
the resources it offers
PURL
5The URL
- A URL is a UNIFORM RESOURCE LOCATOR. It is a
unique address of a resource a web server has
released in the Internet. - A URL consists of 3 principal components
- the protocol descriptor . The most used may be
http which stands for HyperText Tranfer Protocol
but there is also a File Transfer protocol (ftp),
Gopher, File o News. - The hostname of the maschine which serves the
resource - The name of the resource in that maschine
- With Java, it is possible to open an URL and read
its content as it were stored in a file. For
that, it is necessary to create an URL object
with at least the 3 components named above.
6The URL
- Constructors for a URL object
- URL aRUL new URL(http//www.arminco.com/index.h
tml) - URL aURL new URL(httpwww.arminco.com,index
.html) - URL aURL new URL(http,www.arminco.com,80,in
dex.html) - While creating a URL object an exception of the
MalformedURLException class may be generated.
Because of this, some measurements must be taken
(use a try-catch) - try URL miURL new
URL(....) - catch(MalFormedURLExcept
ion e) - // code for reacting to the
exception -
- Methods available for objects of the
- getProtocol(), getHost(), getPort(), getFile(),
openConnection()
7The URL
- If we know beforehand that the content of a URL
is text, we can retrieve it with the following
piece of program - import java.net.
- import java,io.
- public class LeerURL
- public static void main(String args)
- try
- URL miURL new URL(http//www.dcc.uchile.cl
) - URLConnection c miURL.openConnection()
- BufferedReader in new BufferedReader (
- new InputStreamReader(c.getInputStream()))
- String line
- while ((line in.readLine() ! null)
- System.out.prinln(line)
- c.close()
- catch(MalFormedURLException e)
System.out.pritnln(e) -
-
8The TCP Clients Socket
- A socket is an abstraction representing one end
in a communication link between two programs. - When an application wants to send/receive data
to/from the net it has to open one - A socket is always bound to a port (although
sometimes this will be not evident for the
programmer, especially if the program is a client
one). The port is the way an application
identifies a certain socket with the TCP/IP layer - A server which runs on a server is associated
also opens a socket bound to a certain port and
start listening to requests from the clients
whishing to establish a communication. - In order to establish a communication a client
has to previously know 1- the port number, 2- the
host address. With this information the client
tries a rendezvous where the server is already
running and listening.
9TCP Client in Java (1)
- For trying a rendezvous in Java (with a TCP
server, which could have been written in any
language) we must create an object of the Socket
class. - Socket(String host, int port)
- Socket csocket new Socket(hostname,7)
- A host address can be given as an IP number or
name dichato.dcc.uchile.cl or 192.24.80.40. In
the first case Java will do the DNS lookup first.
- The creation of a socket is a blocking statement.
This means that the execution of the program will
block until the creation returns a socket
connected to the server or a null if it fails. - A failure to create a socket may arise if there
is no such host in the internet, if the host is
not currently reachable, of if there is no server
listening to that port on that host. There is a
timeout (default) for this instruction. - A failure will throw a checked Exception. It is
therefore necessary to program the socket
creation within a try-and-catch block
10TCP Client in Java (2)
- If the socket is created then we can open an
inputStream and an ouputStream from that socket
in order to read data from an write data into the
server. - PrintWriter out new PrintWriter(csocket.getOutpu
tStream(), true) - BufferedReader In new BufferedReader(new
- InputStreamReader(calling.getInputStream
())) - Both getInputStream getOutputStream open byte
oriented data streams. Printwriter
BufferedReader are filters which convert bytes
into text (string with end-of-line marks) and
vice-versa. - out.print(hello) out.println(how are you ?)
- String linea in.readLine()
- readLine is a blocking sentence. For using it we
must be sure the server will send an eol mark.
11 A Client for the date server
Protocol The date server just waits until
someone tries a rendezvous and answers with the
current date of the server. This means the client
must try rendezvous (1) and then read the
response of the server (2). Then the server
breaks the communication (3).
2
3
Client
Date server
1
13
DateClient
12 A Client for the echo server
Protocol The echo server waits until someone
makes a rendezvous. Then, it reads line-by-line
what the client sends and answers with the same.
The connection must be broken by the client. So
the client must 1) try a rendezvous, 2) send a
line, 3) read the answer. Then repeat 2 3 until
the client user brakes the dialogue
2
3
Client
Echo server
1
7
EchoClient
13 A finger client
The server waits for a request, gets a command
line from the client, analyses it and then sends
a (variable) set of lines, according to the query
and the status. After that, the server breakes
the communication. The client has to 1) try a
rendezvous, 2) send the query string, 3) read
lines until the communication is broken.
Finger -l ltusernamegt_at_host
3
Client
Finger server
1
7
Finger
14 A pop client for mail retrieving
This protocol is described in the rfc 1939
(internet protocol descriptions) See
http//www.ietf.org/rfc.html
cliente_pop lthostgt ltusernamegt ltpasswordgt
3
Client
mail pop server
1
110
Cliente_pop
15 A SMTP client for mail sending
We will provide a graphic interface for sending
mails from a local computer to an open STMP
server (most of them are open for computers
inside a LAN. The protocol consists in a dialogue
for identifying sender, receiver, subjet and body
of the mail.
2
Client
mail SMTP server
1
25
ClienteSMTP
16A generic client in Java ?
- import java.io.
- import java.net.
- public class Cliente
- public static void main(String args)
throws IOException - Socket echoSocket null
PrintWriter out null BufferedReader in
null - if (args.length ! 2)
- System.out.println(Use
java GClient lthostgt ltportgt ) - int nport Integer.parseInt(args1)
- try
- echoSocket new
Socket(args0, nport) - out new PrintWriter(echoSocket
.getOutputStream(), true) - in new BufferedReader(new
- InputStreamReader(echoSocket.getInputStream())
) - catch (UnknownHostException
e) - System.err.println("Don't
know about host " args0) - System.exit(1)
- catch (IOException e)
17The Sockets constructors
- Socket(String host, int port) The port must be in
the range 1-65,535 - Socket(Inet Address host, int port)The same but
with an InetAddress object as parameter - Socket(String host, int port, String localHost,
int localport) Every TCP communication consists
of a local and remote host and a local and remote
port. This constructor allows us to specify all
them. Specifying local address makes only sense
when local computer is multihomed (more than one
address). Null default address. Sometimes it is
necessary to specify the local port (firewalls).
0 the system will assign a random port number
from the still available. Numbers from 1 to 1025
should not be used as they are reserved for well
known services like echo, telnet finger, ftp.
18More Socket methods in Java
- InetAddress getInetAddress() returns the IP
address of the remote host to which the socket is
connected - int getPort() returns the port number to which
the socket at the other extreme is bound - InetAddress getLocalAddress() returns the IP
address of the local host - int getLocalPort() returns the port number to to
which the socket is bound. - void setSoTimeout(int timeout)sets timeout in
milliseconds for a read operation on this socket.
0 no timeout, this can block the operation
indefinitely. If the reading operation is not
completed in that time an InterruptedIOException
is thrown - int getSoTimeout() returns the timeout of the
socket
19More Socket methods in Java
- void setTcpNoDelay(boolean on) Disables/Enables
using the Nagels algorithm which makes TCP more
efficient by delaying the writing (sending) of
small amounts of data until there is enough data
to send. This may introduce some unacceptable
delays for some applications. - boolean getTcpNoDelay() returns whether the
Nagels algorithm is working or not - void setSoLinger(boolean on, int val) allows to
set a linger time-out (in milliseconds). Linger
is the time the socket communication remains
open by the system after the program closes it.
This will allow to receive packages for
confirmation which are still delayed and avoid
the using of the same port on the same machine
for some 4 min. - int getSoLinger () returns the current linger
setting or 1 if not set. - void setSendBufferSize(int size)
- int getSendBufferSize()
- void setReceiveBufferSize(int size)
- int getReceiveBufferSize()
Sockets.java
20Socket originated Exceptions
- Many of the Socket constructors and methods throw
an exception. These instructions should be
programmed inside a try-and-catch block - Most of the thrown exceptions are objects from a
subclass of the IOException class - BindException the requested local port or
address could not be used. Typically when the
port is already used or it is a system port or
the local address is not a valid one. - ConnectException connection refused because
there was no server listening to that port on the
remote host. - NoRouteToHostException remote host could not be
reached typically because of network problems or
a firewall - UnknownHostException the given host address is
not valid (DNS Lookup filed)