1 1
Java Sockets
Alexander V. Konstantinou
CS4119 – Computer Networks Columbia University Spring 2003
Java Sockets Alexander V. Konstantinou CS4119 Computer Networks - - PowerPoint PPT Presentation
Java Sockets Alexander V. Konstantinou CS4119 Computer Networks Columbia University Spring 2003 1 1 Coordinates Application HTTP, FTP, DNS, SMTP Application Application Layer remoteObject.method(arg) CORBA, RMI CORBA, RMI
1 1
CS4119 – Computer Networks Columbia University Spring 2003
2 2
TCP, UDP IP Ethernet SSL CORBA, RMI Application IP Ethernet TCP, UDP IP Ethernet SSL CORBA, RMI Application Application Layer Transport Layer Internet Layer Network Access Layer Sockets Sockets HTTP, FTP, DNS, SMTP remoteObject.method(arg)
3 3
WWW Browser OS Network Stack
Internet Network Service Network Client
API Protocol IP
4 4
close() close() write(bytes) write(bytes) read(bytes) read(bytes)
Network File
File f = new File("test"); FileInputStream fis = new FileInputStream(f); char c = fis.read(); fis.close(); Socket s = new Socket("www.cs.columbia.edu", 80); InputStream is = s.getInputStream(); char c = is.read(); s.close();
5 5
– Point-to-point – Connection based
– Reliable, in-order (FIFO)
– Point-to-{point | multipoint} – Connectionless – Non-reliable – Out-of-order delivery – Limited payload
stream buffer
6 6
TCP SSL
http browser https browser
7 7
8 8
socket InputStream / OutputStream IP IP IP Buffered{Input,Output}Stream … 7 4 5 6 1 3 0 … … 7 4 5 6 1 3 0 … OS OS Data{Input,Output}Stream Object{Input, Output)Stream { id=1, descr=“test” } 123 “abc” 10.1 File I/O File I/O
9 9
10 10
IP Host
TCP:80 TCP:23 128.59.16.20 UDP:53 httpd named telnetd
Internet
11 11
:Browser :WWW Server TCP Connect “GET /” CR CF “CONTENT-TYPE=text/html CONTENT-LENGTH=122 …”
12 12
Socket socket = new Socket(“www.cs.columbia.edu”, 80); BufferedOutputStream ostream = new BufferedOutputStream(socket.getOutputStream()); byte[] request = “GET /\r\n”.getBytes("ISO-8859-1");
BufferedInputStream istream = new BufferedInputStream(socket.getInputStream()); byte[] buffer = new byte[4096]; int count = istream.read(buffer); while(count != -1) { System.out.print(new String(buffer, 0, count)); count = istream.read(buffer); } socket.close();
13 13
Socket socket = null; try { socket = new Socket(“www.cs.columbia.edu”, 80); // Perform I/O } catch (Throwable e) { // Application-specific error recovery } finally { socket.close(); }
14 14
Socket Server Socket
new Socket(server, port) Socket
(return to accept())
(bidirectional, asymmetric) client server
15 15
ServerSocket server = new ServerSocket(8080); while(active) { Socket socket = server.accept(); BufferedReader reader = new BufferedReader (new InputStreamReader (new BufferedInputStream(socket.getInputStream()))); String request = reader.readLine(); BufferedOutputStream ostream = new BufferedOutputStream(socket.getOutputStream());
socket.close(); } server.close();
16 16
17 17
ServerSocket server = new ServerSocket(80); while(isActive) { Socket socket = server.accept(); Handler handler = new Handler(socket); handler.start(); } public class Handler extends Thread { protected final Socket socket; public Handler(Socket socket) { this.socket = socket; } public void run() { try { // Protocol Impl. } finally { socket.close(); } } }
18 18
Fragmentation
19 19
DatagramSocket socket = new DatagramSocket(); byte[] data = "hello world".getBytes(); DatagramPacket packet = new DatagramPacket (data, data.length, InetAddress.getByName("localhost"), 1234); socket.send(packet); data = "followup call".getBytes(); packet.setData(data); socket.send(packet);
20 20
DatagramSocket socket = new DatagramSocket(1234); byte[] buffer = new byte[512]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); while(true) { socket.receive(packet); String msg = new String(packet.getData(), 0, packet.getLength())); System.out.println(new java.util.Date() + ": " + msg); packet.setLength(buffer.length); // !!! Necessary !!! }
21 21
22 22
23 23
24 24
25 25
26 26