View
217
Download
1
Category
Preview:
Citation preview
Socket ProgrammingSocket Programming
2008-03-042008-03-04
Lee, SooyongLee, Sooyong
torshong@icu.ac.kr
March. 4March. 4thth, 2008, 2008
SocketSocket
What is a socket?a doordoor between application process and end-to-end transport protocol (TCP/UDP) or IP
22
process
TCP withbuffers,
variables
socket
controlled byapplicationdeveloper
controlled byoperating
system
host orserver
process
TCP withbuffers,
variables
socket
controlled byapplicationdeveloper
controlled byoperatingsystem
host orserver
internet
March. 4March. 4thth, 2008, 2008
Socket APISocket API
Explicitly created, used, released by applications
Client/server paradigm
Two types of transport service via socket API:
unreliable datagram (e.g. UDP)
reliable, byte stream-oriented (e.g. TCP)
33
March. 4March. 4thth, 2008, 2008 Netprog 2000 - Java Network ProgrammingNetprog 2000 - Java Network Programming44
Socket Programming in JavaSocket Programming in Java
Java uses BSD-style sockets to interface with TCP/IP services (java.net package)
Java distinguishes between UDP, TCP server & TCP client sockets
Behind-the-scenes classes do the actual work & can be updated or swapped out transparently
March. 4March. 4thth, 2008, 2008
Socket Programming Socket Programming with TCPwith TCP
55
Client 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 (more in Chap 3)
TCP provides reliable, in-order transfer of bytes (“pipe”) between client and server
application viewpoint
March. 4March. 4thth, 2008, 2008
TCP Client/Server Interaction, cont.TCP Client/Server Interaction, cont.
wait for incomingconnection requestconnectionSocket =welcomeSocket.accept()
create socket,port=x, forincoming request:welcomeSocket =
ServerSocket()
create socket,connect to hostid, port=xclientSocket =
Socket()
closeconnectionSocket
read reply fromclientSocket
closeclientSocket
Server (running on hostid) Client
send request usingclientSocketread request from
connectionSocket
write reply toconnectionSocket
TCP connection setup
66
March. 4March. 4thth, 2008, 2008
Stream jargonStream jargon
A stream is a sequence of characters that flow into or out of a process.
An input stream is attached to some input source for the process, e.g., keyboard or socket.
An output stream is attached to an output source, e.g., monitor or socket.
77ou
tToS
erve
r
to network from network
inF
rom
Ser
ver
inF
rom
Use
r
keyboard monitor
Process
clientSocket
inputstream
inputstream
outputstream
TCPsocket
Clientprocess
client TCP socket
March. 4March. 4thth, 2008, 2008
Socket Programming with TCPSocket Programming with TCP
Example 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)
88
March. 4March. 4thth, 2008, 2008
Example: Java client (TCP)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
99
March. 4March. 4thth, 2008, 2008
Example: Java client (TCP), cont.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
1010
March. 4March. 4thth, 2008, 2008
Example: Java server (TCP)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
1111
March. 4March. 4thth, 2008, 2008
Example: Java server (TCP), contExample: 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
1212
March. 4March. 4thth, 2008, 2008
Socket Programming Socket Programming with UDPwith UDP
UDP: no “connection” between client and server
no handshaking sender explicitly attaches IP
address and port of destination to each packet
server must extract IP address, port of sender from received packet
UDP: transmitted data may be received out of order, or lost
application viewpoint
UDP provides unreliable transfer of groups of bytes (“datagrams”)
between client and server
1313
March. 4March. 4thth, 2008, 2008
Client/server socket interaction: UDPClient/server socket interaction: UDP
closeclientSocket
Server (running on hostid)
read reply fromclientSocket
create socket,clientSocket = DatagramSocket()
Client
Create, address (hostid, port=x,send datagram request using clientSocket
create socket,port=x, forincoming request:serverSocket = DatagramSocket()
read request fromserverSocket
write reply toserverSocketspecifying clienthost address,port number
1414
March. 4March. 4thth, 2008, 2008
Example: Java client (UDP)Example: Java client (UDP)
sendP
acket
to network from network
receiv
eP
acket
inF
rom
User
keyboard monitor
Process
clientSocket
UDPpacket
inputstream
UDPpacket
UDPsocket
Output: sends packet (recallthat TCP sent “byte stream”)
Input: receives packet (recall that TCP received “byte stream”)
Clientprocess
client UDP socket
1515
March. 4March. 4thth, 2008, 2008
Example: Java client (UDP)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
1616
March. 4March. 4thth, 2008, 2008
Example: Java client (UDP), cont.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
1717
March. 4March. 4thth, 2008, 2008
Example: Java server (UDP)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
Receivedatagram
1818
March. 4March. 4thth, 2008, 2008
Example: Java server (UDP), contExample: 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
1919
Recommended