Upload
reese-roberson
View
45
Download
0
Tags:
Embed Size (px)
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 끝