Java Sockets Alexander V. Konstantinou CS4119 Computer Networks - - PowerPoint PPT Presentation

java sockets
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

1 1

Java Sockets

Alexander V. Konstantinou

CS4119 – Computer Networks Columbia University Spring 2003

slide-2
SLIDE 2

2 2

Coordinates

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)

slide-3
SLIDE 3

3 3

What Are Sockets?

  • Programming abstraction (API)

– Equivalent: File I/O API

  • Network service end-point
  • Originated as BSD UNIX concept

– Now part of modern OS & languages

WWW Browser OS Network Stack

Internet Network Service Network Client

API Protocol IP

slide-4
SLIDE 4

4 4

File vs. Socket API

close() close() write(bytes) write(bytes) read(bytes) read(bytes)

  • pen(destination) stream
  • pen(filename) stream

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

slide-5
SLIDE 5

5 5

Socket Types

  • Streaming sockets

– Point-to-point – Connection based

  • Bi-directional

– Reliable, in-order (FIFO)

  • Datagram sockets

– Point-to-{point | multipoint} – Connectionless – Non-reliable – Out-of-order delivery – Limited payload

X X

stream buffer

slide-6
SLIDE 6

6 6

Sockets Advantages

  • Common programming abstraction

– Separate the networking stack

  • Application flexibility

– SSL instead of vanilla TCP – Logging & performance measurements – Tunneling

TCP SSL

http browser https browser

slide-7
SLIDE 7

7 7

Java Socket API Overview

Protocol Type Class TCP server Stream java.net.ServerSocket UDP client/server Datagram java.net.DatagramSocket SSL client Stream javax.net.ssl.SSLSocket SSL server Stream javax.net.ssl.SSLServerSocket TCP client Stream java.net.Socket

slide-8
SLIDE 8

8 8

Java I/O Streams

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

slide-9
SLIDE 9

9 9

Network Communication

  • Byte-based

– Byte-stream or byte-array

  • Protocol types

– Text-based: HTTP, SMTP, SOAP, … – Bit-based: DNS, LDAP, SNMP …

  • Issues

– Text: encoding (Unicode 16bit 8bit) – Bit: byte ordering (little/big endian)

slide-10
SLIDE 10

10 10

Network Ports

  • Internet host address

– Example: 128.59.16.1

  • How to offer multiple services?

– Mailbox approach – Port number addressing [1-65535] (216) – Example: 128.59.16.1:TCP:80

IP Host

TCP:80 TCP:23 128.59.16.20 UDP:53 httpd named telnetd

Internet

slide-11
SLIDE 11

11 11

Example: HTTP Client

:Browser :WWW Server TCP Connect “GET /” CR CF “CONTENT-TYPE=text/html CONTENT-LENGTH=122 …”

  • Trivial HTTP 1.0 Client

– Application-layer protocol over TCP – Text-based protocol

slide-12
SLIDE 12

12 12

HTTP Client (No Error Handling)

Socket socket = new Socket(“www.cs.columbia.edu”, 80); BufferedOutputStream ostream = new BufferedOutputStream(socket.getOutputStream()); byte[] request = “GET /\r\n”.getBytes("ISO-8859-1");

  • stream.write(request);
  • stream.flush();

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

slide-13
SLIDE 13

13 13

Stream Socket Error Handling

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

  • Networks fail!

– Applications must be aware of failures

  • Sockets are scarce OS resources

– Don’t rely on garbage collection; close() when done!

slide-14
SLIDE 14

14 14

Server Stream Sockets

  • Bind to port (e.g. 80)
  • Wait for incoming TCP connection

– Encapsulate request as Socket object – Socket pair now communicate

Socket Server Socket

  • 1. Connect

new Socket(server, port) Socket

  • 2. Create

(return to accept())

  • 3. Stream

(bidirectional, asymmetric) client server

slide-15
SLIDE 15

15 15

HTTP Server (Trivial)

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

  • stream.write(“HTTP/1.0 404 HTTP NOT FOUND\r\n”);
  • stream.flush();

socket.close(); } server.close();

slide-16
SLIDE 16

16 16

Java Threads

  • Why parallelize?

– Prevent blocking from malformed requests – Deal with writing to slow clients – Interleave processing/file reading

  • How?

– Multiple threads – Shared memory – Interleaved execution

slide-17
SLIDE 17

17 17

Threaded Server Pattern

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

slide-18
SLIDE 18

18 18

Datagram Sockets

  • Connectionless
  • Unreliable
  • Limited payload

– Theoretical 65508 bytes – Practical 512 bytes (IETF RFC)

  • When to use

– Simple request-response protocol – Small requests/replies (fit in datagram) – Stateless/re-entrant servers – Real-time streaming

Fragmentation

slide-19
SLIDE 19

19 19

UDP Client Example

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

slide-20
SLIDE 20

20 20

UDP Server Example

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

slide-21
SLIDE 21

21 21

Multicast

  • One-to-many transmission

– Special range of IP addresses

  • 224.0.0.0 – 239.255.255.255
  • Same socket API as UDP
  • Not universally available
slide-22
SLIDE 22

22 22

SSL Sockets

  • Secure communications

– Layered over TCP

  • Drop-in replacement (subclasses)

– Socket SSLSocket – ServerSocket SSLServerSocket

  • Key management

– keytool command-line utility – Creates public/private keys

  • Stored in “keystores”

– Java VM invocation with keystore info

slide-23
SLIDE 23

23 23

Non-Blocking Java I/O

  • Thread scaling issues

– E.g. HTTP server with 1000s connections

  • JDK 1.4 introduced non-blocking I/O

– Perform all processing in one thread – java.nio.* package

slide-24
SLIDE 24

24 24

Socket FAQs

  • Wrong host/port/protocol

– E.g “localhost”, “127.0.0.1”, “www” vs. “www.foo.com”

  • Ignoring I/O exceptions
  • Streams:

– flush() when done – use buffered reader/stream – close connections when done

  • Datagrams

– packet.setLength() before reuse – Test in lossy environment

slide-25
SLIDE 25

25 25

Socket FAQs (2)

  • Wait-forever

– Use Socket.setSoTimeout() – Catch InterruptedIOException

  • Byte-alignment issues

– Network byte order

  • Security restrictions (applets)
  • Unix restricts non-root servers to ports >1024
slide-26
SLIDE 26

26 26

Advanced Issues

  • Thread pools

– Resource management

  • Binding to specific interfaces

– Binding to a specific interface (security)

  • Swing applications

– Swing is single threaded – Network operations in non-Swing thread – Use SwingUtilities.invokeLater()