0% found this document useful (0 votes)
71 views

Web Tecw2

This document provides an overview of Java network programming and key concepts related to networking in Java. It discusses networking basics like TCP, UDP, ports, DNS and the client-server model. It then summarizes the main Java classes for TCP/IP networking - InetAddress, Socket, ServerSocket. It also covers UDP with classes like DatagramPacket. Key elements covered include how sockets provide an interface for network programming, how client and server sockets work, and factory and instance methods of the InetAddress class for working with IP addresses.

Uploaded by

Mohamed K Marah
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views

Web Tecw2

This document provides an overview of Java network programming and key concepts related to networking in Java. It discusses networking basics like TCP, UDP, ports, DNS and the client-server model. It then summarizes the main Java classes for TCP/IP networking - InetAddress, Socket, ServerSocket. It also covers UDP with classes like DatagramPacket. Key elements covered include how sockets provide an interface for network programming, how client and server sockets work, and factory and instance methods of the InetAddress class for working with IP addresses.

Uploaded by

Mohamed K Marah
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 63

Java Network Programming

Tushar B. Kute,
Department of Information Technology,
Sandip Institute of Technology and
Research Centre, Nashik.
Agenda
• Networking Basics
– TCP, UDP, Ports, DNS, Client-Server Model
• TCP/IP in Java
• Sockets
• URL
– The java classes: URL, URLConnection
• Datagrams

2
“The Network is Computer”

PC client

Internet
Server
Local Area Network

PDA
Increased demand for Internet applications

• To take advantage of opportunities presented by the


Internet, businesses are continuously seeking new and
innovative ways and means for offering their services via
the Internet.
• This created a huge demand for software designers with
skills to create new Internet-enabled applications or
migrate existing/legacy applications on the Internet
platform.
• Object-oriented Java technologies—Sockets, threads,
RMI, clustering, Web services-- have emerged as leading
solutions for creating portable, efficient, and
maintainable large and complex Internet applications.
Elements of C-S Computing

a client, a server, and network

st
ue
q
Re
Client
Server
Network
Re
s ul
t

Client machine
Server machine
Networking Basics
• Computers running on the Internet communicate with
each other using either the Transmission Control
Protocol (TCP) or the User Datagram Protocol (UDP)

6
DNS - Domain name system
• The Domain Name system (DNS) associates various sorts
of information with so-called domain names.
• Most importantly, it serves as the "phone book" for the
Internet by translating human-readable computer
hostnames, e.g. www.example.com, into the IP
addresses, e.g. 208.77.188.166, that networking
equipment needs to deliver information.
• It also stores other information such as the list of mail
exchange servers that accept email for a given domain.

7
Understanding Ports
• The TCP and UDP P
o TCP
protocols use ports to server
r Client
map incoming data to a t

particular process
running on a computer.

app app app app

port port port port

TCP or UDP
Packet
Data port# data
Understanding Ports
• Port is represented by a positive (16-bit) integer
value
• Some ports have been reserved to support common/
well known services:
– ftp 21/tcp
– telnet 23/tcp
– smtp 25/tcp
– login 513/tcp
• User level process/services generally use port
number value >= 1024
Sockets
• Sockets provide an interface for programming networks at
the transport layer.
• Network communication using Sockets is very much similar to
performing file I/O
– In fact, socket handle is treated like file handle.
– The streams used in file I/O operation are also applicable to socket-
based I/O
• Socket-based communication is programming language
independent.
– That means, a socket program written in Java language can also
communicate to a program written in Java or non-Java socket
program.
Socket Communication
• A server (program) runs on a specific
computer and has a socket that is bound to a
specific port. The server waits and listens to
the socket for a client to make a connection
request.

Connection request
port

server
Client
Socket Communication
• If everything goes well, the server accepts the connection.
Upon acceptance, the server gets a new socket bounds to a
different port. It needs a new socket (consequently a
different port number) so that it can continue to listen to the
original socket for connection requests while serving the
connected client.
port

server

port
Client
port Connection
Transmission Control Protocol
• A connection-based protocol that provides a reliable
flow of data between two computers.
• Provides a point-to-point channel for applications that
require reliable communications.
– The Hypertext Transfer Protocol (HTTP), File Transfer Protocol
(FTP), and Telnet are all examples of applications that require a
reliable communication channel
• Guarantees that data sent from one end of the
connection actually gets to the other end and in the
same order it was sent. Otherwise, an error is reported.
User Datagram Protocol
• A protocol that sends independent packets of data,
called datagrams, from one computer to another with
no guarantees about arrival. UDP is not connection-
based like TCP and is not reliable:
– Sender does not wait for acknowledgements
– Arrival order is not guaranteed
– Arrival is not guaranteed
• Used when speed is essential, even in cost of reliability
– e.g. streaming media, games, Internet telephony, etc.
Ports
• Data transmitted over the Internet is
accompanied by addressing information that
identifies the computer and the port for which
it is destined.
– The computer is identified by its 32-bit IP address,
which IP uses to deliver data to the right
computer on the network. Ports are identified by
a 16-bit number, which TCP and UDP use to
deliver the data to the right application.
Ports – Cont.
• Port numbers range from 0 to 65,535 (16-bit)
– Ports 0 - 1023 are called well-known ports. They
are reserved for use by well-known services:
• 20, 21: FTP
• 23: TELNET
• 25: SMTP
• 110: POP3
• 80: HTTP
Networking Classes in the JDK
• Through the classes in java.net, Java programs
can use TCP or UDP to communicate over the
Internet.
– The URL, URLConnection, Socket, and
ServerSocket classes all use TCP to
communicate over the network.
– The DatagramPacket, DatagramSocket,
and MulticastSocket classes are for use with
UDP.

17
TCP/IP in Java
• Accessing TCP/IP from Java is straightforward.
The main functionality is in the following
classes:
– java.net.InetAddress : Represents an IP
address (either IPv4 or IPv6) and has methods for
performing DNS lookup (next slide).
– java.net.Socket : Represents a TCP socket.
– java.net.ServerSocket : Represents a
server socket which is capable of waiting for
requests from clients.
18
InetAddress
• The InetAddress class is used to encapsulate
both the numerical IP address and the domain
name for that address.
• We interact with this class by using the name
of an IP host, which is more convenient and
understandable than its IP address.
• The InetAddress class hides the number
inside.
Factory Methods
• static InetAddress getLocalHost( )
throws UnknownHostException
• static InetAddress getByName(String hostName)
throws UnknownHostException
• static InetAddress[ ] getAllByName(String
hostName)
throws UnknownHostException
Example:
class InetAddressTest
{
public static void main(String args[])
throws UnknownHostException
{
InetAddress Address = InetAddress.getLocalHost();
System.out.println(Address);
Address = InetAddress.getByName("www.tusharkute.com");
System.out.println(Address);
InetAddress SW[] =
InetAddress.getAllByName("www.yahoo.com");
for (int i=0; i<SW.length; i++)
System.out.println(SW[i]);
}
}
Instance Methods
class InetAddressTest1
{
public static void main(String args[])
throws UnknownHostException
{
InetAddress Address =
InetAddress.getByName("www.google.com");
System.out.println(Address.getHostAddress());
System.out.println(Address.getHostName());
if(Address.isMulticastAddress())
System.out.println("It is multicast address");
}
}
Sockets and Java Socket Classes
• A socket is an endpoint of a two-way
communication link between two programs
running on the network.
• A socket is bound to a port number so that the
TCP layer can identify the application that
data destined to be sent.
• Java’s .net package provides two classes:
– Socket – for implementing a client
– ServerSocket – for implementing a server

23
Java Sockets
Server ServerSocket(1234)

Output/write stream Client

Input/read stream

Socket(“128.250.25.158”, 1234)

It can be host_name like “books.google.com”


Client Sockets
• Java wraps OS sockets (over TCP) by the
objects of class java.net.Socket
Socket(String remoteHost, int remotePort)
• Creates a TCP socket and connects it to the
remote host on the remote port (hand shake)
• Write and read using streams:
– InputStream getInputStream()
– OutputStream getOutputStream()

25
Constructors
• Socket(String remoteHost, int remotePort)

• Socket(InetAddress ip, int remotePort)


Instance Methods
• InetAddress getInetAddress( )
• int getPort( )
• int getLocalPort( )
• InputStream getInputStream( )
• OutputStream getOutputStream( )
• void close( )
Implementing a Client
1. Create a Socket Object:
client = new Socket( server, port_id );
2. Create I/O streams for communicating with the server.
is = new DataInputStream(client.getInputStream() );
os = new DataOutputStream( client.getOutputStream() );
3. Perform I/O or communication with the server:
– Receive data from the server:
String line = is.readLine();
– Send data to the server:
os.writeBytes("Hello\n");
4. Close the socket when done:
client.close();
Example: Whois server
class Whois
{
public static void main(String args[ ]) throws Exception
{
int c;
Socket s = new Socket("internic.net", 43);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
String str="www.google.com";
byte buf[] = str.getBytes();
out.write(buf);
while ((c = in.read()) != -1)
System.out.print((char) c);
s.close();
}
}
Example: Time server
public class Daytime
{
public static void main(String[] args) throws Exception
{
Socket theSocket = new Socket("time.nist.gov", 13);
InputStream timeStream = theSocket.getInputStream( );
StringBuffer time = new StringBuffer( );
int c;
while ((c = timeStream.read( )) != -1) time.append((char) c);
String timeString = time.toString( ).trim( );
System.out.println("It is " + timeString + " at " + "local host");
}
}
ServerSocket
• This class implements server sockets. 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.
• A server socket is technically not a socket:
when a client connects to a server socket, a
TCP connection is made, and a (normal)
socket is created for each end point.
31
Constructors
• ServerSocket (int port)
throws BindException, IOException
• ServerSocket (int port, int maxQueue)
throws BindException, IOException
• ServerSocket (int port, int maxQ, InetAddress ip)
throws IOException
Implementing a Server
• Open the Server Socket:
ServerSocket server;
DataOutputStream os;
DataInputStream is;
server = new ServerSocket( PORT );
• Wait for the Client Request:
Socket client = server.accept();
• Create I/O streams for communicating to the client
is = new DataInputStream(client.getInputStream() );
os = new DataOutputStream(client.getOutputStream());
• Perform communication with client
Receive from client: String line = is.readLine();
Send to client: os.writeBytes("Hello\n");
• Close sockets: client.close();
Accepting Connections
• Usually, the accept() method is executed
within an infinite loop
– i.e., while(true){...}
• The accept method returns a new socket (with
a new port) for the new channel. It blocks
until connection is made.
• Syntax:
– Socket accept() throws IOException
Client-Server Interaction via TCP
Examples
• EchoDemoServer
• EchoDemoClient
URL - Uniform Resource Locator
• URL is a reference (an address) to a resource on the Internet.
– A resource can be a file, a database query and more.
• URLs are just a subset of the more general concept of Uniform
Resource Identifiers (URIs) which are meant to describe all
points in the information space

http://www.javapassion.com:80/javaintro/index.html#Networking_A

Protocol

Host Port Path &


Number File Reference
Name
Name
Class URL
• Class URL represents a Uniform Resource
Locator, a pointer to a "resource" on the
World Wide Web.
• We distinguish between:
– Absolute URL - contains all of the information
necessary to reach the resource.
– Relative URL - contains only enough information
to reach the resource relative to (or in the context
of) another URL.

38
Constructors
• URL(String urlSpecifier)
• URL(URL urlObj, String urlSpecifier)
• URL(String protName, String hostName, int
port, String path)
• URL(String protName, String hostName, String
path)

39
Example
class URLDemo
{
public static void main(String args[])
throws MalformedURLException
{
URL hp = new URL("http://content-
ind.cricinfo.com/ci/content/current/story/news.html");
System.out.println("Protocol: " + hp.getProtocol());
System.out.println("Port: " + hp.getPort());
System.out.println("Host: " + hp.getHost());
System.out.println("File: " + hp.getFile());
System.out.println("Ext:" + hp.toExternalForm());
}
}
Output
Protocol: http
Port: -1
Host: content-ind.cricinfo.com
File: /ci/content/current/story/news.html
Ext:http://content-
ind.cricinfo.com/ci/content/current/story/news.
html
URLConnection
• URLConnection is an abstract class that represents an active
connection to a resource specified by a URL.
• The URLConnection class has two different but related
purposes. First, it provides more control over the interaction
with a server (especially an HTTP server) than the URL class.
With a URLConnection, we can inspect the header sent by the
server and respond accordingly. We can set the header fields
used in the client request. We can use a URLConnection to
download binary files.
• Finally, a URLConnection lets us send data back to a web
server with POST or PUT and use other HTTP request
methods.
Process
• Construct a URL object.
• Invoke the URL object's openConnection( ) method
to retrieve a URLConnection object for that URL.
• Configure the URLConnection.
• Read the header fields.
• Get an input stream and read data.
• Get an output stream and write data.
• Close the connection.
Reading Data from Server
• Construct a URL object.
• Invoke the URL object's openConnection( ) method to
retrieve a URLConnection object for that URL.
• Invoke the URLConnection's getInputStream( ) method.
• Read from the input stream using the usual stream API.
• The getInputStream() method returns a generic
InputStream that lets you read and parse the data that
the server sends.
• public InputStream getInputStream( )
Example
public class SourceViewer2 {
public static void main (String[] args) {
if (args.length > 0) {
try {
//Open the URLConnection for reading
URL u = new URL(args[0]);
URLConnection uc = u.openConnection( );
InputStream raw = uc.getInputStream( );
InputStream buffer = new BufferedInputStream(raw);
// chain the InputStream to a Reader
Reader r = new InputStreamReader(buffer);
int c;
while ((c = r.read( )) != -1) {
System.out.print((char) c);
}
}
catch (MalformedURLException ex) {
System.err.println(args[0] + " is not a parseable URL");
}
catch (IOException ex) {
System.err.println(ex);
}
} // end if
} // end main
} // end SourceViewer2
URLConnection Example
import java.net.*;
import java.io.*;

public class URLConnectionReader {


public static void main(String[] args) throws Exception {
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;

while ((inputLine = in.readLine()) != null)


System.out.println(inputLine);
in.close();
}
}

46
Difference between URL and URLConnection

• URLConnection provides access to the HTTP


header.
• URLConnection can configure the request
parameters sent to the server.
• URLConnection can write data to the server as
well as read data from the server.
Header Information
• HTTP/1.1 200 OK
• Date: Mon, 18 Oct 1999 20:06:48 GMT
• Server: Apache/1.3.4 (Unix) PHP/3.0.6 mod_perl/1.17
• Last-Modified: Mon, 18 Oct 1999 12:58:21 GMT
• ETag: "1e05f2-89bb-380b196d"
• Accept-Ranges: bytes
• Content-Length: 35259
• Connection: close
• Content-Type: text/html
Methods
• public String getContentType( )
• public int getContentLength( )
• public long getDate( )
• public long getExpiration( )
• public long getLastModified( )
Example
public class HeaderViewer catch (MalformedURLException ex)
{ {
public static void main(String args[]) System.out.println("I can't understand this URL...");
{ }
try catch (IOException ex)
{ {
URL u = new URL("http://www.rediffmail.com/index.html"); System.err.println(ex);
URLConnection uc = u.openConnection( ); }
System.out.println("Content-type: " + System.out.println( );
uc.getContentType( )); } // end main
System.out.println("Content-encoding: " } // end HeaderViewer
+ uc.getContentEncoding( ));
System.out.println("Date: " + new Date(uc.getDate( )));
System.out.println("Last modified: "
+ new Date(uc.getLastModified( )));
System.out.println("Expiration date: "
+ new Date(uc.getExpiration( )));
System.out.println("Content-length: " +
uc.getContentLength( ));
} // end try
Sample Output
• Sample output:
Content-type: text/htmlContent-encoding: nullDate:
Mon Oct 18 13:54:52 PDT 1999Last modified: Sat Oct
16 07:54:02 PDT 1999Expiration date: Wed Dec 31
16:00:00 PST 1969 Content-length: -1
• Sample output for:
http://www.oreilly.com/graphics/space.gif
Content-type: image/gifContent-encoding: nullDate:
Mon Oct 18 14:00:07 PDT 1999Last modified: Thu
Jan 09 12:05:11 PST 1997Expiration date: Wed Dec
31 16:00:00 PST 1969 Content-length: 57
Retrieving Header field
• public String getHeaderField(String name)
• Example:
– String contentType = uc.getHeaderField("content-type");
– String contentEncoding = uc.getHeaderField("content-
encoding"));
– String data = uc.getHeaderField("date");
– String expires = uc.getHeaderField("expires");
– String contentLength = uc.getHeaderField("Content-
length");
Datagrams
• A datagram is an independent, self-contained
message sent over the network whose arrival,
arrival time, and content are not guaranteed.
• The java.net package contains three classes to
help you write Java programs that use
datagrams to send and receive packets over
the network: DatagramSocket and
DatagramPacket

53
TCP vs. UDP
No. TCP UDP
1 This Connection oriented protocol This is connection-less protocol
The TCP connection is byte stream The UDP connection is a message stream
2

It does not support multicasting and It supports broadcasting


3 broadcasting
It provides error control and flow control The error control and flow control is not
4 provided
TCP supports full duplex transmission UDP does not support full duplex
5 transmission
It is reliable service of data transmission This is an unreliable service of data
6 transmission
The TCP packet is called as segment The UDP packet is called as user
7 datagram.
UDP in Java
• DatagramPacket
• DatagramSocket
Receiving DatagramPacket
• public DatagramPacket(byte[] buffer, int
length)
• public DatagramPacket(byte[] buffer, int
offset, int length)
– Example:
byte[] buffer = new byte[8192];
DatagramPacket dp = new
DatagramPacket(buffer, buffer.length);
Sending Datagrams
• public DatagramPacket(byte[] data, int length,
InetAddress destination, int port)
• public DatagramPacket(byte[] data, int offset,
int length, InetAddress destination, int port)
DatagramSocket
• public DatagramSocket( ) throws
SocketException
• public DatagramSocket(int port) throws
SocketException
• public DatagramSocket(int port, InetAddress
interface) throws SocketException
Sending and Receiving Packets
• public void send(DatagramPacket dp) throws
IOException
• public void receive(DatagramPacket dp)
throws IOException
Example:
• UDPServer
• UDPClient
References
1. Java Network Programming,
3rd Edition, By Elliotte Rusty Harold, O'Reilly, October 2004
Chapter 2: Basic Networking Concepts
Chapter 7: URLs and URIs
Chapter 9: Sockets for Clients
Chapter 10: Sockets for Servers
Chapter 13: UDP Datagrams and Sockets
Chapter 15: URL Connections
2. Java 2 the Complete Reference,
Fifth Edition by Herbert Schildt, 2001, Osborne McGraw Hill.
Chapter 18: Networking
References
3. Learning Java,
3rd Edition, By Jonathan Knudsen, Patrick Niemeyer,
O'Reilly, May 2005
Chapter 13: Network Programming
4. A Laboratory Manual for Java Programming (1526),
by Maharashtra State Board of Technical Education,
Mumbai, 2004
Thank You

You might also like