jnp

Post on 06-May-2015

1.436 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Short set of slides, not a tutorial by itself, but it contains some code samples.

TRANSCRIPT

Java Network Programming©Miguel Sánchez 2010

Outline

Sockets in JavaTCP SocketsUDP SocketsMultithreading

The Sockets Interface

To communicate you have to connect the two ends

Sockets in Java

The sockets API is available in many languages

Protocol stack is part of most Operating Systems

Java provides a clean and easy access to the sockets

A socket is an end-point

Socket Address

Two kinds of sockets:

tcp & udp

Each socket:

IP address

port number

Java Sockets

Socket classes belong to java.net packageSocket, ServerSocket & DatagramSocketEach type works quite differentlyJava help is your friend: read it

Sockets on the command line?

Many tools available:

sock (lab#2)

nc (or netcat)

telnet (tcp only)

TCP client

Client starts the connection the serverSocket s=new Socket(“hostname”,25);Connection is closed by:s.close();Something else in between is desired!

Socket Input/Output

TCP provides a data streamByte-oriented vs. line-oriented I/OScanner & PrintWriterInputStream & OutputStreamUDP exchanges byte arrays only

Exception handling

Some methods can cause ExceptionsExceptions may be caught to be handled by your codeExceptions can be thrown not to be handled by your codetry/catch vs throws clauses

Basic TCP client

It connects to a web server

It sends a request

It receives and prints the responseimport java.net.*;import java.io.*;import java.util.*;

class ClientTCP {public static void main(String args[]) throws UnknownHostException, IOException {! Socket s=new Socket("www.upv.es",80);! Scanner in=new Scanner(s.getInputStream());! PrintWriter out=new PrintWriter(s.getOutputStream(),true);! out.println("GET / HTTP/1.0"); ! out.println();! while(in.hasNext()) System.out.println(in.nextLine());! }}

Basic TCP server

Server waits for a new connection from a client

Server transmits a message to the client and closes the connection

Repeatimport java.net.*;import java.io.*;import java.util.*;class ServerTCP {public static void main(String args[]) throws UnknownHostException, IOException {! ServerSocket ss = new ServerSocket(8888);! while(true) {! ! Socket s = ss.accept();! ! Scanner in=new Scanner(s.getInputStream());! ! PrintWriter out=new PrintWriter(s.getOutputStream(),true);! ! out.println("Hello Client!"); ! ! s.close();! ! }! }}

Multithread servers

Several clients can be server AT ONCE

Use of fork

Use of Threads (Java)

server

cli1

cli2

cli3

Threads in Java

Your class extends Thread class

Code of thread is defined on run() method

start() method call will start running a new thread of excution

class MyThread extends Thread { public void run() { // thread code here while(true) System.out.print("T"); } public static void main(String args[]) { Thread t = new MyThread(); t.start(); while(true) System.out.print("M"); }}

Basic Concurrent Server

What is the difference from basic server?

import java.net.*;import java.io.*;import java.util.*;class CServerTCP extends Thread { PrintWriter myOut=null; public CServerTCP(PrintWriter out) { myOut=out; } public void run() {myOut.println("Hello Client!"); } public static void main(String args[]) throws UnknownHostException, IOException {! ServerSocket ss = new ServerSocket(8888);! while(true) {! ! Socket s = ss.accept();! ! Scanner in=new Scanner(s.getInputStream());! ! PrintWriter out=new PrintWriter(s.getOutputStream(),true);! ! new CServerTCP(out).start();! ! }! }}

UDP Sockets

DatagramSocket sends/receives DatagramPacket objectsA DatagramPacket has a data buffer in the form of a byte arrayDestination address is defined for each DatagramPacket (remember: no connection here!)

Sample UDP sender

Addresses are expressed as InetAddressBuffer length changes with contentnc -u -l 7777

import java.net.*;import java.io.*;import java.util.*;class UDPsender {public static void main(String args[]) throws UnknownHostException, IOException {! DatagramSocket ds = new DatagramSocket(12345);! byte buffer[] = new String("Hello World!\n").getBytes();! InetAddress dst = InetAddress.getByName("127.0.0.1");! DatagramPacket dp = new DatagramPacket(buffer,buffer.length,dst,7777);! ds.send(dp);!! }}

UDP echo server

Returns datagram back to the sender

import java.net.*;import java.io.*;import java.util.*;

class UDPecho {public static void main(String args[]) throws UnknownHostException, IOException {! DatagramSocket ds = new DatagramSocket(12345);! byte buffer[] = new byte[1024];! DatagramPacket dp = new DatagramPacket(buffer,buffer.length);! for(;;) {! ! ds.receive(dp);!! ! dp.setAddress(dp.getAddress()); // back to the sender! ! dp.setPort(dp.getPort());! ! ds.send(dp);! ! }! }}

Multiprotocol server

Several protocols are handled by the same server program

It can be like an extended concurrent server with serveral types of threads

Now it is your time to start coding!

top related