socket programming in java

36
SOCKET PROGRAMMING IN JAVA

Upload: reese-roberson

Post on 31-Dec-2015

44 views

Category:

Documents


0 download

DESCRIPTION

SOCKET PROGRAMMING IN JAVA. Questions that will be Addressed. What mechanisms are available for a programmer who writes network applications? How to write a network application that sends packets between hosts (client and server) across an IP network? Answer: socket API. IP Network. Client. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SOCKET PROGRAMMING IN JAVA

SOCKET PROGRAMMING IN JAVA

Page 2: SOCKET PROGRAMMING IN JAVA

QUESTIONS THAT WILL BE ADDRESSED

What mechanisms are available for a programmer who writes network applications?

How to write a network application that sends packets between hosts (client and server) across an IP network?

Answer: socket API

2Client ServerIP Network

Page 3: SOCKET PROGRAMMING IN JAVA

LAYERS OF THE IP PROTOCOL SUITE

3Link Layer

Transport Layer

Network Layer

Application Layer

Link Layer

Transport Layer

Network Layer

Application Layer

Ethernet

e.g. ftp

e.g. TCP, UDP

e.g. IP

Page 4: SOCKET PROGRAMMING IN JAVA

PROTOCOL SUITE LOCATION Internet Protocol Layer

CEN

45

00

C

4Link Layer

Transport Layer (TCP, UDP)

Network Layer (IP)

Application Layer

Network Card &Device Driver

(e.g. Ethernet card)

Operating System(e.g. Unix)

Applications(e.g. browser, game, ftp)

Application ProgrammingInterface (API)

(e.g. network API)

Interface to the Network Card

Location

Page 5: SOCKET PROGRAMMING IN JAVA

NETWORK API

Operating system provides Application Programming Interface (API) for network application

API is defined by a set of function types, data structures, and constants

Desirable characteristics of the network interfaceSimple to useFlexible

independent from any application allows program to use all functionality of the network

Standardized allows programmer to learn once, write anywhere

Application Programming Interface for networks is called socket

5

Page 6: SOCKET PROGRAMMING IN JAVA

SOCKETS Sockets : a door between application process and

transport protocol (TCP, UDP). Sockets provide mechanisms to communicate between

computers across a network

There are different kind of socketsDARPA Internet addresses (Internet Sockets)Unix interprocess communication (Unix Sockets)CCITT X.25 addressesand many others

Berkeley sockets is the most popular Internet Socketruns on Linux, FreeBSD, OS X, Windowsfed by the popularity of TCP/IP 6

Page 7: SOCKET PROGRAMMING IN JAVA

TYPES OF INTERNET SOCKETS Different types of sockets implement different

communication types (stream vs. datagram) Type of socket: stream socket

connection-oriented two way communication reliable (error free), in order delivery can use the Transmission Control Protocol (TCP) e.g. telnet, ssh, http

Type of socket: datagram socket connectionless, does not maintain an open

connection, each packet is independent can use the User Datagram Protocol (UDP) e.g. IP telephony

Other types exist: similar to the one above7

Page 8: SOCKET PROGRAMMING IN JAVA

SOCKET ACCESS

Support stream and datagram packets (e.g. TCP, UDP, IP)

Is Similar to UNIX file I/O API (provides a file descriptor)

8

Page 9: SOCKET PROGRAMMING IN JAVA

NAMING AND ADDRESSING Host name

identifies a single hostvariable length string (e.g.

www.berkeley.edu)is mapped to one or more IP addresses

IP Addresswritten as dotted octets (e.g. 10.0.0.1)32 bits. Not a number! But often needs to be

converted to a 32-bit to use. Port number

identifies a process on a host16 bit number

9

Page 10: SOCKET PROGRAMMING IN JAVA

CLIENT-SERVER ARCHITECTURE

Client requests service to server Server responds with sending service or error

message to client

CEN

45

00

C

10

Client Server

request

response

Page 11: SOCKET PROGRAMMING IN JAVA

SIMPLE CLIENT-SERVER EXAMPLEC

EN

45

00

C

11

Client Serverrequest

response

socket()connect()send()

recv()close()

socket()accept()

recv()

send()

recv()close()

Connectionestablishment

Data response

Data request

End-of-file notification

Page 12: SOCKET PROGRAMMING IN JAVA

12

SOCKET PROGRAMMING WITH UDPUDP: no “connection”

between client and server

no handshaking sender explicitly

attaches IP address and port of destination to each packet

UDP: transmitted data may be received out of order, or lost

Page 13: SOCKET PROGRAMMING IN JAVA

13

CLASS DATAGRAMSOCKET

DatagramSocket(int port) Create DatagramSocket object with port number

Methods void receive(DatagramPacket packet) – socket 의

정보를 읽어들여 packet 에 저장 void send(DatagramPacket packet) – packet 을

socket 을 통해서 전송 void close() – socket 을 close

Page 14: SOCKET PROGRAMMING IN JAVA

2: Application Layer

14

CLIENT/SERVER SOCKET INTERACTION: UDP

closeclientSocket

Server (running on hostid)

read reply fromclientSocket

create socket,clientSocket = DatagramSocket()

Client

Create, address (hostid, port=6434,send datagram request using clientSocket

create socket,Port=6434, forincoming request:serverSocket = DatagramSocket()

read request fromserverSocket

write reply toserverSocketspecifying clienthost address,port number

Page 15: SOCKET PROGRAMMING IN JAVA

2: Application Layer

15

EXAMPLE: JAVA CLIENT (UDP)import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine();

sendData = sentence.getBytes();

Createinput stream

Create client socket

Translate hostname to IP

address using DNS

Page 16: SOCKET PROGRAMMING IN JAVA

2: Application Layer

16

EXAMPLE: JAVA CLIENT (UDP), CONT.

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); }

}

Create datagram with data-to-send,

length, IP addr, port

Send datagramto server

Read datagramfrom server

Page 17: SOCKET PROGRAMMING IN JAVA

2: Application Layer

17

EXAMPLE: JAVA SERVER (UDP)import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

serverSocket.receive(receivePacket);

Createdatagram socket

at port 9876

Create space forreceived datagram

Receivedatagra

m

Page 18: SOCKET PROGRAMMING IN JAVA

2: Application Layer

18

EXAMPLE: JAVA SERVER (UDP), CONT

String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase();

sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } }

}

Get IP addrport #, of

sender

Write out datagramto socket

End of while loop,loop back and wait foranother datagram

Create datagramto send to client

Page 19: SOCKET PROGRAMMING IN JAVA

19

public class Receiver { public static void main(String args[]) { byte[] data = new byte[20]; DatagramPacket packet = new [ 1 ](data,data.length); DatagramSocket socket = null;

try { socket = new [ 2 ] (5555); socket.[ 3 ] (packet); socket.close(); } catch(IOException e) {}

System.out.println("Data="+new String(packet.getData())); System.out.println("Length="+packet.getLength()); System.out.println("From="+packet.getAddress()); System.out.println("Port="+packet.getPort()); }}

public class Sender { public static void main(String args[]) { BufferedReader in = null; String message = null;

try { in = new BufferedReader( new InputStreamReader(System.in)); message = in.readLine(); } catch (IOException e) {} byte[] data = message.getBytes(); DatagramPacket packet = null; try { packet = new DatagramPacket(data,data.length, InetAddress.getByName("localhost"),5555); } catch(UnknownHostException e) {} DatagramSocket socket = null; try { socket = new DatagramSocket(); socket.send(packet); socket.close(); } catch(IOException e){} }}

Quiz.

Page 20: SOCKET PROGRAMMING IN JAVA

ANSWER

1: DatagramPacket 2: DatagramSocket 3: receive

CEN

45

00

C

20

Page 21: SOCKET PROGRAMMING IN JAVA

SOCKET-PROGRAMMING USING TCPTCP service: reliable transfer of bytes from one

process to another

process

TCP withbuffers,

variables

socket

controlled byapplicationdeveloper

controlled byoperating

system

host orserver

process

TCP withbuffers,

variables

socket

controlled byapplicationdeveloper

controlled byoperatingsystem

host orserver

internet

Page 22: SOCKET PROGRAMMING IN JAVA

2: A

pp

licatio

n La

yer

22

SOCKET PROGRAMMING WITH TCPClient must contact server server process must first

be running server must have created

socket (door) that welcomes client’s contact

Client contacts server by: creating client-local TCP

socket specifying IP address,

port number of server process

When client creates socket: client TCP establishes connection to server TCP

When contacted by client, server TCP creates new socket for server process to communicate with client allows server to talk

with multiple clients source port numbers

used to distinguish clients

Page 23: SOCKET PROGRAMMING IN JAVA

23

CLASS SERVERSOCKET

ServerSocket(int port) client 를 받아들일 ServerSocket 생성

Methods Socket accept() – client 의 TCP 연결 요청을 받아들이고

연결을 담당할 socket 을 반환 void close() – socket 을 close

Page 24: SOCKET PROGRAMMING IN JAVA

24

CLASS SOCKET

Socket(String host, int port) or (InetAddress addr, int port) 접속할 서버주소 /포트번호 로 TCP 연결요청

Methods InputStream getInputStream() – socket 에 연결된 입력

stream 반환 OutputStream getOutputStream() – socket 에 연결된 출력

stream 반환 InetAddress getInetAddress() – 상대방의 InetAddress 정보 InetAddress getLocalAddress() – 자신의 InetAddress 정보 int getPort() – 상대방 port number int getLocalPort() – 자신의 port number void close() – socket close

Page 25: SOCKET PROGRAMMING IN JAVA

2: Application Layer

25

CLIENT/SERVER SOCKET INTERACTION: TCP

wait for incomingconnection requestconnectionSocket =welcomeSocket.accept()

create socket,port=6434, forincoming request:welcomeSocket =

ServerSocket()

create socket,connect to hostid, port=6434

clientSocket = Socket()

closeconnectionSocket

read reply fromclientSocket

closeclientSocket

Server (running on hostid) Client

send request usingclientSocketread request from

connectionSocket

write reply toconnectionSocket

TCP connection setup

Page 26: SOCKET PROGRAMMING IN JAVA

EXAMPLE 1 : CLIENT PROGRAMMING

Create stream socket (socket() ) Create Input,Output streams and attach to

socket While still connected:

Write(read) data to(from) input(output) stream Close TCP connection and Socket (close())

26

Page 27: SOCKET PROGRAMMING IN JAVA

public class SimpleClient { public static void main(String args[]) throws IOException { Socket s; DataOutputStream dos; s = new Socket("localhost",6434); dos = new DataOutputStream(s.getOutputStream()); dos.writeUTF(“Hello Dr.Han"); dos.close(); s.close(); }}

27

Page 28: SOCKET PROGRAMMING IN JAVA

EXAMPLE 2 : SERVER PROGRAMMING

Create server socket (ServerSocket() ) Bind port to socket Listen for new client While

accept user connection and create a new socket (accept() )

Create Input,Output streams and attach to socket Write(read) data to(from) input(output) stream

Close TCP connection and Socket (close())

CEN

45

00

C

28

Page 29: SOCKET PROGRAMMING IN JAVA

public class SimpleServer {

public static void main(String args[]) { ServerSocket s = null; Socket schild; DataInputStream dis;

s = new ServerSocket(6434); while(true) { schild = s.accept(); dis = new DataInputStream(schild.getInputStream()); String str = new String (dis.readUTF()); System.out.println(str); dis.close(); schild.close(); }

s.close(); }}

29

Page 30: SOCKET PROGRAMMING IN JAVA

SERVER: ALTERNATIVE WAYS OF HANDLING MANY CLIENTS Forking a new process for each client: But, creating new process is expensive. Multithreaded implementation: have one

thread handling each client. Thread is like a process but light-weighted.

CEN

45

00

C

30

Page 31: SOCKET PROGRAMMING IN JAVA

2: A

pp

licatio

n La

yer

31

SOCKET PROGRAMMING WITH TCPExample client-server

app:1) client reads line from

standard input (inFromUser stream) , sends to server via socket (outToServer stream)

2) server reads line from socket

3) server converts line to uppercase, sends back to client

4) client reads, prints modified line from socket (inFromServer stream)

Page 32: SOCKET PROGRAMMING IN JAVA

2: Application Layer

32

EXAMPLE: JAVA CLIENT (TCP)import java.io.*; import java.net.*; class TCPClient {

public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence;

BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

Socket clientSocket = new Socket("hostname", 6789);

DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

Createinput stream

Create client socket,

connect to server

Createoutput stream

attached to socket

Page 33: SOCKET PROGRAMMING IN JAVA

2: Application Layer

33

EXAMPLE: JAVA CLIENT (TCP), CONT.

BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

sentence = inFromUser.readLine();

outToServer.writeBytes(sentence + '\n');

modifiedSentence = inFromServer.readLine();

System.out.println("FROM SERVER: " + modifiedSentence);

clientSocket.close(); } }

Createinput stream

attached to socket

Send lineto server

Read linefrom server

Page 34: SOCKET PROGRAMMING IN JAVA

2: Application Layer

34

EXAMPLE: JAVA SERVER (TCP)import java.io.*; import java.net.*;

class TCPServer {

public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence;

ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept();

BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));

Createwelcoming socket

at port 6789

Wait, on welcomingsocket for contact

by client

Create inputstream, attached

to socket

Page 35: SOCKET PROGRAMMING IN JAVA

2: Application Layer

35

EXAMPLE: JAVA SERVER (TCP), CONT

DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());

clientSentence = inFromClient.readLine();

capitalizedSentence = clientSentence.toUpperCase() + '\n';

outToClient.writeBytes(capitalizedSentence); } } }

Read in linefrom socket

Create outputstream,

attached to socket

Write out lineto socket

End of while loop,loop back and wait foranother client connection

Page 36: SOCKET PROGRAMMING IN JAVA

36

public class Peer {

protected Vector handlers;

public static ServerSocket server = null;

public static void main(String[] args) {

Peer p = new Peer();

}

public Peer () {

server = new ServerSocket (inPort);

handlers = new Vector();

while(true) {

Socket client = server.accept();

ChatHandler c = new ChatHandler(this,client);

handlers.addElement(c);

Thread myThread = new Thread(c);

myThread.start();

}

}

public static void sendRequest(String msg) {

Socket s = new Socket(ipaddr, port);

BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

bw.write(msg);

bw.flush();

s.close();

}

}

class ChatHandler implements Runnable { protected Peer peer; protected Socket socket; protected InputStream ins; public ChatHandler(Peer peer2, Socket s) throws IOException { this.peer = peer2; this.socket = s; ins = socket.getInputStream(); }

private String readLine() { String str = new String(); while ((i = ins.read()) != '\n') { str = str.concat(String.valueOf((char) i)); } return str; }

public void run() { Socket s2; String msg = readLine();

InetAddress is = socket.getInetAddress(); s2 = new Socket(is.getHostAddress(),this.peer.outPort); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s2.getOutputStream())); bw.write(msg); bw.flush(); peer.handlers.removeElement(this); ins.close(); socket.close(); } // run()} // class 끝