SOCKET PROGRAMMING IN JAVA

Preview:

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

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

ANSWER

1: DatagramPacket 2: DatagramSocket 3: receive

CEN

45

00

C

20

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

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

23

CLASS SERVERSOCKET

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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

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 끝

Recommended