Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Java networking
Jim Briggs
based on notes by Amanda Peart
based on Bell & Parr's bonus chapter
http://www.shu.ac.uk/java/networkprogramming/starthere.html
WECPP
1
Aims
•
•
•
•
•
To understand Java networking
To appreciate socket programming
Define the client socket
How to use sockets
Overview of server sockets
WECPP
2
Review Internet basics
• TCP/IP protocol (contra UDP/IP)
– ensures reliable transmission of data
• IP address
– identifies Internet host (strictly interface)
• Domain name
– user-friendly way of identifying hosts
– DNS maps names to IP addresses (and vice-versa)
• Port
– identifies particular service on a host (e.g. HTTP = 80)
WECPP
3
Sockets
• Sockets
– abstract input-output devices
– could apply to any sort of device, but most often
referred to in the context of networking:
• software mechanism for one program to talk to another
• Two-way connection between two programs
– full-duplex link
– more than one socket can be associated with a port
WECPP
4
Client and server sockets
• Client socket and server socket need to be
programmed in different ways
• Client socket assumes the server is ready to
accept connections
• Server needs to listen for connection
requests
WECPP
5
How is a socket used?
• A new socket is created by a program
• The socket attempts to connect to a remote
host
• Once the connection has been established,
the local machine and the remote machine
send and receive data
• When the transmission is complete, one or
both machines closes the connection
WECPP
6
Socket Programming
• Java uses ‘class Sockets’ to interface to TCP
sockets (import java.net.*)
• The constructor method for the class:
• creates a TCP socket
• allows the user to specify a host and port
• attempts to connect to the host
Socket connection = new Socket("www.port.ac.uk", 80);
Socket connection = new Socket(InetAddress, port);
WECPP
7
When connection is established...
• The client host port is chosen by the system at run
time
• The client port number can be accessed using:
connection.getLocalPort()
• A socket is closed when:
– The socket is garbage collected
– The program ends
– The program explicitly closes it:
connection.close()
WECPP
8
Errors and exceptions
• ConnectException
– The connection is refused by the remote host.
– Host could be busy or there might be no server
on the port
• NoRouteToHostException
– The connection has timed out.
WECPP
9
Input with sockets
• For input it is most convenient to create a
BufferedReader (java.io) as follows:
BufferedReader in = new BufferedReader (new
InputStreamReader(socket.getInputStream()));
• This enables readLine to be used for string input.
Data ends when null is returned. Example:
String line;
while ((line = in.readLine()) != null) {
processLine();
}
WECPP
10
Output with sockets
• For output to a stream it is convenient to create a
PrintWriter (java.io) object as follows:
PrintWriter out = new
PrintWriter(socket.getOutputStream(), true);
• Use method println to output a line.
out.println("string");
• Closing a socket closes all of the associated
streams.
WECPP
11
Socket crashes
• When a program reads from a socket, the call on
read blocks (waits) until the data has been
obtained
• But if the remote host crashes, the program is left
hanging
• An alternative is to call setSoTimeout(timeout)
– Sets the maximum waiting time (in milliseconds)
• When the time expires, an InterruptedException is
thrown
WECPP
12
Port scanner example
• A port scanner is a program that hunts for working
ports on an Internet host
– Warning: can be impolite
• PortScanner.java
– Checks for unknown host
– Attempts to connect to ports 1 to 256 of specified host
– Ignores ports where no socket can be established
WECPP
13
Get server time example
• Connect to server's port 13
• Read a line of text (containing time and
date)
• GetRemoteTime.java
• Of course it cannot connect if no service is
running
WECPP
14
Class Sockets
Description
Example
constructors
public Socket(String
host, int port)
creates a new Socket
Socket socket = new
object corresponding to Socket("www.shu.ac.u
destination host and
k", 80);
port
public
Socket(InetAddress
host, int port)
creates a new Socket
Socket socket = new
object corresponding to Socket(inetAddress,
the InetAddress object 80);
and port
WECPP
15
Class Sockets
Description
Example
Object Method
public InetAddress
getInetAddress()
returns the InetAddress InetAddress iNE =
object corresponding to socket.getInetAddress(
the host that is, or will );
be, connected to.
public int getPort()
returns the port number int port =
of the host to which the socket.getPort();
socket is, or will be,
connected.
WECPP
16
Class Sockets
Description
Example
Object Method
public int
getLocalPort()
returns the local port
number.
int port =
socket.getLocalPort();
public InputStream
getInputStream()
returns an input stream
that can be used by the
program for input.
InputStream is =
socket.getInputStream();
public OutputStream
getOutputStream()
returns an output stream
that can be used by the
program for output.
OutputStream os =
socket.getOutputStream();
WECPP
17
Class Sockets
Description
Example
Object Method
public synchronized void disconnects a socket. This also
close()
closes the streams associated
with the socket
socket.close();
public String toString()
String details =
socket.toString()
returns a string representation
of a socket with remote host
name, remote IP address,
remote port, local port.
public synchronized void sets the time-out to the
setSoTimeout(int ms)
parameter value (in
milliseconds)
WECPP
socket.
setSoTimeout(18000
);
18
Sockets and Server Sockets
• Socket:
• Server socket:
– Implemented by class
socket
– A socket object is a
connection to a certain
host on a particular
port
– Socket objects are used
for data transfer
– A Socket object
initiates a connection
WECPP
– Implemented by class
ServerSocket
– A SocketServer object
just waits on a
particular port for
incoming connections
from anywhere
– A ServerSocket object
waits for connections
19
The algorithm for a server 1
• Create ServerSocket object on a particular port
ServerSocket server = new ServerSocket(12345, 100);
• ServerSocket object listens for any connection
attempts
Socket connection = server.accept();
• The server is blocked (waits) until a client
attempts to connect
• When a client attempts to connect, the server
wakes up
WECPP
20
The algorithm for a server 2
• When a client connects, method accept returns a
new Socket object representing the connection
between the server and the client
• That socket object's getInputStream and/or
getOutputStream methods are called to obtain
streams which can be used to send/receive data
• The server and the client interact using streams
according to an agreed protocol
• When finished, the server, the client, or both close
the connection
WECPP
21
Daytime server example
• DaytimeServer.java
• Listens on port 13
• When a connection is accepted it uses the
socket's output stream to write the current
date and time
• Then closes the socket and listens for a new
connection (forever)
WECPP
22
More complex servers
• A server dealing with one connection
cannot respond to further connections
– Normally, connection requests are queued
• May be better to create a new thread to deal
with each connection
– Allows main thread to keep listening for new
connections
WECPP
23
Reading
• Bell and Parr - bonus chapter
http://www.shu.ac.uk/java/networkprogram
ming/
starthere.html
• Deitel, chapter 18
WECPP
24