Introduction to TCP Socket Programming

advertisement
TCP Socket Programming
What is a socket?
 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
Two types of sockets
 SOCK_STREAM
 TCP
 connection oriented,
bidirectional
 reliable, in-order
delivery
 SOCK_DGRAM

UDP

no connection

unreliable delivery, no
guarantee on the
order

can send/receive
Socket-programming using TCP
Socket: a door between application process and endend-transport protocol (UDP or TCP)
TCP service: reliable transfer of bytes from one
process to another
controlled by
application
developer
controlled by
operating
system
process
process
socket
TCP with
buffers,
variables
host or
server
internet
socket
TCP with
buffers,
variables
controlled by
application
developer
controlled by
operating
system
host or
server
CPSC 441 - Application Layer
4
Socket programming with TCP
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
application viewpoint
TCP provides reliable, in-order
transfer of bytes (“pipe”)
between client and server
CPSC 441 - Application Layer
5
Ports
 Used to address processes on a host
 0-1024 is usually reserved for known service
FTP
Web
Server Server
21
80
Transport
Layer
Network
Layer
DLL/Physical
Socket Programming in C
CPSC 441 - Application Layer
7
Socket Programming - Flow
socket()
connect()
Client
socket()
bind()
listen()
send()
Server
accept()
recv()
..
.
recv()
close()
close()
send()
wait for
connection
request from next
client
socket()
 int s_listen = socket(family, type, protocol);
family: AF_INET specifies Ipv4
 type: SOCK_STREAM, SOCK_DGRAM
 protocol: 0 (pseudo, IP ). See /etc/protocols

bind()
 bind(s_listen, localAdd, addLength)
Server specifies which port and address it will be
listening to
 s_listen: our listening socket descriptor
 localAdd: socket address structure
 addLength: length of localAdd

Address Structure
struct sockaddr_in {
u_char sin_len; // length of address
u_char sin_family; // family of address
u_short sin_port; // protocol port num
struct in_addr sin_addr; // IP Addr
char 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 (2 ways)
//specify address to listen to


inet_pton(AF_INET, “127.0.0.1”, &sockAdd.sin_addr.s_addr)
//listen to any local address
 sockAdd.sin_addr.s_addr = htonl(INADDR_ANY)
 Set port

sockAdd.sin_port = htons(9999);
listen()
 int status = listen(s_listen, queuelength);
 status: -1 if error, 0 otherwise
 s_listen: socket descriptor
 queuelength: Number of clients that can “wait” for a connection
 listen is non-blocking: returns immediately
accept()
 int s_new = accept(s_listen, &clientAddress,
&addLength);





s_new: new socket for communication with client
s_listen: the listening socket
clientAddress: struct sockaddr, address of client
addLength: size of client address structure
accept is blocking: waits for connection before returning
Talking
 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
System calls - fork()
 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
Socket Programming in Java
CPSC 441 - Application Layer
17
Stream jargon
keyboard
monitor
output
stream
inFromServer
Client
Process
process
input
stream
outToServer
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.
inFromUser
 A stream is a sequence of
input
stream
client
TCP
clientSocket
socket
to network
TCP
socket
from network
CPSC 441 - Application Layer
18
Example: Java client (TCP)
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
Create
input stream
Create
client socket,
connect to server
Create
output stream
attached to socket
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
CPSC 441 - Application Layer
19
Example: Java client (TCP), cont.
Create
input stream
attached to socket
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
Send line
to server
outToServer.writeBytes(sentence + '\n');
Read line
from server
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
CPSC 441 - Application Layer
20
Example: Java server (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
Create
welcoming socket
at port 6789
Wait, on welcoming
socket for contact
by client
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()));
CPSC 441 - Application Layer
21
Example: Java server (TCP), cont
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
CPSC 441 - Application Layer
22
Demo
A simple client – server example:
Echo Server
References
Socket Programming, Dan Rubinstein,
http://www1.cs.columbia.edu/~danr/courses/6761/Fall00/intro/6761-1bsockets.ppt
 15-441 Socket Programming, www.cs.cmu.edu/afs/cs/academic/class/15441f01/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

Download