Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets...

21
Netprog: Java Sockets 1 Java Sockets Programming • The package java.net provides support for sockets programming (and more). • Typically you import everything defined in this package with: import java.net.*;

Transcript of Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets...

Page 1: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 1

Java Sockets Programming

• The package java.net provides support for sockets programming (and more).

• Typically you import everything defined in this package with:

import java.net.*;

Page 2: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 2

Classes

InetAddress

Socket

ServerSocket

DatagramSocket

DatagramPacket

Page 3: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 3

InetAddress class

• static methods you can use to create new InetAddress objects.– getByName(String host)– getLocalHost()

InetAddress x = InetAddress.getByName( “monte.cs.rpi.edu”);

Page 4: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 4

Sample Code: Lookup.java

• Uses InetAddress class to lookup hostnames found on command line.

> java Lookup monte www.yahoo.com

monte:128.213.8.110

www.yahoo.com:64.58.76.176

Page 5: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 5

try {

InetAddress a = InetAddress.getByName(hostname);

System.out.println(hostname + ":" + a.getHostAddress());

} catch (UnknownHostException e) {

System.out.println("No address found for " + hostname);

}

try {

InetAddress a = InetAddress.getByName(hostname);

System.out.println(hostname + ":" + a.getHostAddress());

} catch (UnknownHostException e) {

System.out.println("No address found for " + hostname);

}

Page 6: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 6

Socket class

• Corresponds to active TCP sockets only!– client sockets– socket returned by accept();

• Passive sockets are supported by a different class: ServerSocket

• UDP sockets are supported by DatagramSocket

Page 7: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 7

Socket Constructors

• Constructor creates a TCP connection to a named TCP server.– There are a number of constructors:Socket(InetAddress server, int port);

Socket(InetAddress server, int port,InetAddress local, int localport);

Socket(String hostname, int port);

Page 8: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 8

Socket Methods

void close();

InetAddress getInetAddress(); getpeername

InetAddress getLocalAddress(); getsockname

InputStream getInputStream();

OutputStream getOutputStream();

• Lots more (setting/getting socket options, partial close, etc.)

Page 9: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 9

Socket I/O

• Socket I/O is based on the Java I/O support (in the package java.io).

• InputStream and OutputStream are abstract classes– common operations defined for all kinds of

InputStreams, OutputStreams…

Page 10: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 10

InputStream Basics

// reads some number of bytes and

// puts in buffer array b

int read(byte[] b);

// reads up to len bytes

int read(byte[] b, int off, int len);

Both methods can throw IOException.

Both return –1 on EOF.

Page 11: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 11

OutputStream Basics// writes b.length bytesvoid write(byte[] b);

// writes len bytes starting // at offset offvoid write(byte[] b, int off, int len);

Both methods can throw IOException.

Page 12: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 12

ServerSocket Class(TCP Passive Socket)

• Constructors:

ServerSocket(int port);

ServerSocket(int port, int backlog);

ServerSocket(int port, int backlog,

InetAddress bindAddr);

Page 13: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 13

ServerSocket MethodsSocket accept();

void close();

InetAddress getInetAddress();

int getLocalPort();

throw IOException, SecurityException

Page 14: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 14

Sample Echo Server

TCPEchoServer.java

Simple TCP Echo server.

Based on code from:

TCP/IP Sockets in Java

Page 15: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 15

UDP Sockets

• DatagramSocket class

• DatagramPacket class needed to specify the payload (incoming or outgoing).

Page 16: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 16

DatagramSocket Constructors

DatagramSocket();

DatagramSocket(int port);

DatagramSocket(int port, InetAddress a);

All can throw SocketException or SecurityException.

Page 17: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 17

Datagram Methods

void connect(InetAddress, int port);

void close();

void receive(DatagramPacket p);

void send(DatagramPacket p);

Lots more!

Page 18: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 18

DatagramPacket

• Contain the payload (a byte array).

• Can also be used to specify the destination address (when not using connected mode UDP).

Page 19: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 19

DatagramPacket Constructors

For receiving:

DatagramPacket( byte[] buf, int len);

For sending:

DatagramPacket( byte[] buf, int len

InetAddress a, int port);

Page 20: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 20

DatagramPacket methods

byte[] getData();

void setData(byte[] buf);

void setAddress(InetAddress a);

void setPort(int port);

InetAddress getAddress();

int getPort();

destination address

could be either address (depends on context)

Page 21: Netprog: Java Sockets1 Java Sockets Programming The package java.net provides support for sockets programming (and more). Typically you import everything.

Netprog: Java Sockets 21

Sample UDP code

UDPEchoServer.java

Simple UDP Echo server.

Test using nc as the client (netcat):

> nc –u hostname port