CPSC 441 - Application Layer 1 Trying out HTTP (client side) for yourself 1. Telnet to your favorite...
-
Upload
geoffrey-morgan -
Category
Documents
-
view
219 -
download
0
description
Transcript of CPSC 441 - Application Layer 1 Trying out HTTP (client side) for yourself 1. Telnet to your favorite...
CPSC 441 - Application Layer 1
Trying out HTTP (client side) for yourself
1. Telnet to your favorite Web server:Opens TCP connection to port 80(default HTTP server port) at cis.poly.edu.Anything typed in sent to port 80 at cis.poly.edu
telnet cis.poly.edu 80
2. Type in a GET HTTP request:GET /~ross/ HTTP/1.1Host: cis.poly.edu
By typing this in (hit carriagereturn twice), you sendthis minimal (but complete) GET request to HTTP server
3. Look at response message sent by HTTP server!
CPSC 441 - Application Layer 2
Try SMTP interaction for yourself:
telnet servername 25 see 220 reply from server enter HELO, MAIL FROM, RCPT TO, DATA, QUIT
commands above lets you send email without using email
client (reader)
CPSC 441 - Application Layer 3
Socket programming
Socket API introduced in BSD4.1 UNIX,
1981 explicitly created, used,
released by apps client/server paradigm two types of transport
service via socket API: unreliable datagram reliable, byte stream-
oriented
a host-local, application-created,
OS-controlled interface (a “door”) into which
application process can both send and
receive messages to/from another
application process
socket
Goal: learn how to build client/server application that communicate using sockets
An abstract interface provided to the application programmer File descriptor, allows apps to read/write to
the network Allows to processes on remotely
connected computers to talk to each other
What is a socket?
SOCK_STREAM TCP connection
oriented, bidirectional
reliable, in-order delivery
Two types of socketsSOCK_DGRAM
UDP no connection unreliable delivery,
no guarantee on the order
can send/receive
CPSC 441 - Application Layer 6
Socket-programming using TCPSocket: a door between application process and end-
end-transport protocol (UCP or TCP)TCP 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 byapplicationdevelopercontrolled byoperatingsystem
host orserver
internet
CPSC 441 - Application Layer 7
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 (more in Chap 3)
TCP provides reliable, in-order transfer of bytes (“pipe”) between client and server
application viewpoint
Socket Programming in C
CPSC 441 - Application Layer 8
Socket Programming - Flowsocket()
connect()
send()
recv()
close()
...
socket()
bind()
listen()
accept()
recv()
send()
close()
wait for connection request from next client
Client Server
int s = socket(family, type,protocol); family: AF_INET specifies Ipv4 type: SOCK_STREAM, SOCK_DGRAM protocol: 0 (pseudo, IP ). See /etc/protocols
socket()
TransportLayer
Used to address processes on a host 0-1024 is usually reserved for known service
Ports
FTP Server
Web Server
21 80
NetworkLayer
DLL/Physical
Bind(socket, localAdd, addLength) Server specifies which port and address it will
be listening to socket: our socket descriptor localAdd: socket address structure addLength: length of the address
bind()
struct sockaddr_in {u_char sin_len; // length of addressu_char sin_family; // family of addressu_short sin_port; // protocol port numstruct in_addr sin_addr; // IP Addrchar sin_zero[8]; // set to zero, used for padding};
Address Structure
Declare address structure struct sockaddr_in sockAdd;
Set family sockAdd.sin_family = AF_INET;
Set IP address sockAdd.sin_addr.s_addr =
inet_pton(“127.0.0.1”) Set port
sockAdd.sin_port = htons(9999);
Address Structure
int status = listen(sock, queuelength); status: -1 if error, 0 otherwise sock: socket descriptor queuelen: Number of clients that can “wait” for a connection listen is non-blocking: returns immediately
listen()
int s = accept(sock, &name, &namelen); s: new socket for communication with client sock: the listening socket name: struct sockaddr, address of client namelen: sizeof(name): size of client address structure accept is blocking: waits for connection before returning
accept()
fork() is a C system call used to spawn child processes Execution for both child and parent process
continues at the next instruction fork() returns
• 0 if this is the child process• PID (>0) of the child process if this is the parent• <0 if fork() fails
Used to keep listening on socket and talking on another socket
System calls - fork()
int send(int s_new, const void *buf, int len, int flags);
• s_new – socket descriptor• buf – pointer to buffer• len – size of buffer• flags – can be safely set to 0
int recv(int s_new, void *buf, int len, unsigned int flags);
• similar to send• buf holds the data to be transferred
Talking
Socket Programming in Java
CPSC 441 - Application Layer 19
CPSC 441 - Application Layer 20ou
tToS
erve
r
to network from network
inFr
omS
erve
r
inFr
omU
ser
keyboard monitor
Process
clientSocket
inputstream
inputstream
outputstream
TCPsocket
Clientprocess
client TCP socket
Stream 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.
CPSC 441 - Application Layer 21
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 serverCreate
output streamattached to socket
CPSC 441 - Application Layer 22
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
CPSC 441 - Application Layer 23
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 6789Wait, on welcoming
socket for contactby client
Create inputstream, attached
to socket
CPSC 441 - Application Layer 24
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
Demo
A simple client – server example:Echo Server
Socket Programming, Dan Rubinstein, http://www1.cs.columbia.edu/~danr/courses/6761/Fall00/intro/6761-1b-sockets.ppt
15-441 Socket Programming, www.cs.cmu.edu/afs/cs/academic/class/15441-f01/www/lectures/lecture03.ppt
Network Programming, Geoff Kuenning, www.cs.hmc.edu/~geoff/classes/hmc.cs105.200701/slides/class21_net2.ppt
Socket Programming, Abhinav Jain, www.cs.purdue.edu/homes/jain8/cs422/pso3.ppt
References