jnp

21
Java Network Programming ©Miguel Sánchez 2010

Upload: hj43us

Post on 06-May-2015

1.424 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Jnp

Java Network Programming©Miguel Sánchez 2010

Page 2: Jnp

Outline

Sockets in JavaTCP SocketsUDP SocketsMultithreading

Page 3: Jnp

The Sockets Interface

To communicate you have to connect the two ends

Page 4: Jnp

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

Page 5: Jnp

A socket is an end-point

Page 6: Jnp

Socket Address

Two kinds of sockets:

tcp & udp

Each socket:

IP address

port number

Page 7: Jnp

Java Sockets

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

Page 8: Jnp

Sockets on the command line?

Many tools available:

sock (lab#2)

nc (or netcat)

telnet (tcp only)

Page 9: Jnp

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!

Page 10: Jnp

Socket Input/Output

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

Page 11: Jnp

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

Page 12: Jnp

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());! }}

Page 13: Jnp

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();! ! }! }}

Page 14: Jnp

Multithread servers

Several clients can be server AT ONCE

Use of fork

Use of Threads (Java)

server

cli1

cli2

cli3

Page 15: Jnp

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"); }}

Page 16: Jnp

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();! ! }! }}

Page 17: Jnp

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!)

Page 18: Jnp

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);!! }}

Page 19: Jnp

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);! ! }! }}

Page 20: Jnp

Multiprotocol server

Several protocols are handled by the same server program

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

Page 21: Jnp

Now it is your time to start coding!