Download Socket programming

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Socket programming
goal: learn how to build client/server applications that
communicate using sockets
socket: dropbox between application process and endend-transport protocol
application
process
socket
application
process
transport
transport
network
network
link
physical
Internet
link
controlled by
app developer
controlled
by OS
physical
Application Layer 2-1
Socket programming
Two socket types for two transport services:
§  UDP: unreliable datagram
§  TCP: reliable, byte stream-oriented
Application Example:
1.  Client reads a line of characters (data) from its
keyboard and sends the data to the server.
2.  The server receives the data and converts
characters to uppercase.
3.  The server sends the modified data to the client.
4.  The client receives the modified data and displays
the line on its screen.
Application Layer 2-2
Socket programming with UDP
UDP: no “connection” between client & server
v 
v 
v 
no handshaking before sending data
sender explicitly attaches IP destination address and
port # to each packet
rcvr extracts sender IP address and port# from
received packet
UDP: transmitted data may be lost or received
out-of-order
Application viewpoint:
v UDP provides unreliable transfer of groups of bytes
(“datagrams”) between client and server
Application Layer 2-3
Client/server socket interaction: UDP
server (running on serverIP)
create socket, port= x:
serverSocket =
DatagramSocket(x)
read datagram from
serverSocket
write reply to
serverSocket
specifying
client address,
port number
client
create socket:
clientSocket =
DatagramSocket()
Create datagram with server IP and
port=x; send datagram via
clientSocket
read datagram from
clientSocket
close
clientSocket
Application 2-4
Example: Java client (UDP)
import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception
{
create
input stream
create
client socket
translate
hostname to IP
addr using DNS
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();
Application Layer 2-5
Example: Java client (UDP)
create datagram with
data-to-send,
length, IP addr, port
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length,
IPAddress, 9876);
send datagram
to server
clientSocket.send(sendPacket);
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
read datagram
from server
clientSocket.receive(receivePacket);
String modifiedSentence =
new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
Application Layer 2-6
Example: Java server (UDP)
import java.io.*;
import java.net.*;
create
datagram socket
at port 9876
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)
{
create space for
received datagram
receive
datagram
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
Application Layer 2-7
Example: Java server (UDP)
String sentence = new String(receivePacket.getData());
get IP addr
port #, of
sender
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
create datagram
to send to client
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
write out
datagram
to socket
serverSocket.send(sendPacket);
}
}
}
end of while loop,
loop back and wait for
another datagram
Application Layer 2-8
Example app: UDP client
Python UDPClient
include Python’s socket
library
import socket
serverName = ‘hostname’
serverPort = 12000
create UDP socket for
server
get user keyboard
input
Attach server name, port to
message; send into socket
clientSocket = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)
message = raw_input(’Input lowercase sentence:’)
clientSocket.sendto(message,(serverName, serverPort))
read reply characters from
socket into string
modifiedMessage, serverAddress =
print out received string
and close socket
print modifiedMessage
clientSocket.recvfrom(2048)
clientSocket.close()
Application Layer 2-9
Example app: UDP server
Python UDPServer
from socket import *
serverPort = 12000
create UDP socket
serverSocket = socket(AF_INET, SOCK_DGRAM)
bind socket to local port
number 12000
serverSocket.bind(('', serverPort))
print “The server is ready to receive”
loop forever
Read from UDP socket into
message, getting client’s
address (client IP and port)
send upper case string
back to this client
while 1:
message, clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage, clientAddress)
Application Layer 2-10
Socket programming with TCP
client must contact server
v 
v 
server must be first running
server must have created
socket (dropbox) that
welcomes client’s contact
v 
server accepts connect by:
§  creating new connectionspecific socket
§  allows server to talk with
multiple clients
client connects to server by:
v 
v 
creating TCP socket,
specifying IP address, port
number of server process
client socket is now bound
to that specific server
application viewpoint:
TCP provides reliable, in-order
byte-stream transfer (“pipe”)
between client and server
Application Layer 2-11
Client/server socket interaction: TCP
client
server (running on hostid)
create socket,
port=x, for incoming request:
serverSocket =
ServerSocket()
wait for incoming
TCP
connection request
connectionSocket = connection
serverSocket.accept()
read request from
connectionSocket
write reply to
connectionSocket
close
connectionSocket
setup
create socket,
connect to hostid, port=x
clientSocket = socket()
send request using
clientSocket
read reply from
clientSocket
close
clientSocket
Application Layer 2-12
Example: Java client (TCP)
import java.io.*;
import java.net.*;
class TCPClient {
create
input stream
create
clientSocket object
of type Socket,
connect to server
create
output stream
attached to socket
this package defines Socket()
and ServerSocket() classes
public static void main(String argv[]) throws Exception
{
server name,
String sentence;
e.g., www.umass.edu
String modifiedSentence;
server port #
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
Application Layer 2-13
Example: Java client (TCP)
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
create
input stream
attached to socket
sentence = inFromUser.readLine();
send line
to server
outToServer.writeBytes(sentence + '\n');
read line
from server
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
close socket
clientSocket.close();
(clean up behind yourself!)
}
}
Application Layer 2-14
Example: Java server (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
create
welcoming socket
at port 6789
wait, on welcoming
socket accept() method
for client contact create,
new socket on return
create input
stream, attached
to socket
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()));
Application Layer 2-15
Example: Java server (TCP)
create output
stream, attached
to socket
DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());
read in line
from socket
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
write out line
to socket
outToClient.writeBytes(capitalizedSentence);
}
}
}
end of while loop,
loop back and wait for
another client connection
Application Layer 2-16
Example app: TCP client
Python TCPClient
import socket
serverName = ‘servername’
create TCP socket for
server, remote port 12000
serverPort = 12000
clientSocket = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
No need to attach server
name, port
sentence = raw_input(‘Input lowercase sentence:’)
clientSocket.send(sentence)
modifiedSentence = clientSocket.recv(1024)
print ‘From Server:’, modifiedSentence
clientSocket.close()
Application Layer 2-17
Example app: TCP server
Python TCPServer
create TCP welcoming
socket
server begins listening for
incoming TCP requests
loop forever
server waits on accept()
for incoming requests, new
socket created on return
read bytes from socket (but
not address as in UDP)
close connection to this
client (but not welcoming
socket)
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind((‘’,serverPort))
serverSocket.listen(1)
print ‘The server is ready to receive’
while 1:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024)
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence)
connectionSocket.close()
Application Layer 2-18
Related documents