jnp
Post on 06-May-2015
1.436 Views
Preview:
DESCRIPTION
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