1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.
-
Upload
carol-hunter -
Category
Documents
-
view
213 -
download
0
Transcript of 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.
![Page 1: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/1.jpg)
1
Writing Network Applications using the TCP/IP Protocol Stack:
Socket Programming
![Page 2: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/2.jpg)
2
Network Applications Communicating
TCP UDPIPLLPL
TCP UDPIPLLPL
TCP UDPIPLLPL
Web Browser
Web Server
FtpServer
FtpClient
RTSPServer
RealPlayer
Client: initiates contact with server (“speaks first”)• typically requests service from server, e.g., Web Browser
Server: provides requested service to client• e.g., Web server sends requested Web page
Typical network app has two pieces: client and server
Client-Server Paradigm
![Page 3: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/3.jpg)
3
How to program? The socket layer
TCP UDPIPLLPL
TCP UDPIPLLPL
TCP UDPIPLLPL
Web Browser
Web Server
FtpServer
FtpClient
RTSPServer
RealPlayer
Socket Layer
Socket Layer
Socket Layer
• Socket Layer: – Programmer’s API to the IP
Protocol stack
![Page 4: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/4.jpg)
4
Socket Creation
Family Type Protocol
TCPPF_INET
SOCK_STREAM IPPROTO_TCP
UDP SOCK_DGRAM IPPROTO_UDP
• mySock = socket(family, type, protocol);• TCP/IP-specific sockets
• Socket reference– File (socket) descriptor in UNIX– Socket handle in WinSock
![Page 5: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/5.jpg)
5
Specifying Addresses• struct sockaddr
{unsigned short sa_family; /* Address family (e.g.,
AF_INET) */char sa_data[14]; /* Protocol-specific address information
*/};
• struct sockaddr_in{
unsigned short sin_family; /* Internet protocol (AF_INET) */ unsigned short sin_port; /* Port (16-bits) */ struct in_addr sin_addr; /* Internet address (32-bits) */ char sin_zero[8]; /* Not used */
}; struct in_addr{
unsigned long s_addr; /* Internet address (32-bits) */};
Gen
eri
cIP
Sp
eci
fic
![Page 6: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/6.jpg)
6
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Assign a port to socket3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
Server starts by getting ready to receive client connections…
![Page 7: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/7.jpg)
7
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
/* Create socket for incoming connections */ if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed");
![Page 8: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/8.jpg)
8
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
echoServAddr.sin_family = AF_INET; /* Internet address family */ echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY);/* Any incoming interface */ echoServAddr.sin_port = htons(echoServPort); /* Local port */
if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) DieWithError("bind() failed");
![Page 9: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/9.jpg)
9
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
/* Mark the socket so it will listen for incoming connections */ if (listen(servSock, MAXPENDING) < 0) DieWithError("listen() failed");
![Page 10: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/10.jpg)
10
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
for (;;) /* Run forever */{ clntLen = sizeof(echoClntAddr);
if ((clntSock=accept(servSock,(struct sockaddr *)&echoClntAddr,&clntLen)) < 0) DieWithError("accept() failed");
![Page 11: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/11.jpg)
11
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
Server is now blocked waiting for connection from a client
![Page 12: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/12.jpg)
12
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
Later, a client decides to talk to the server…
![Page 13: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/13.jpg)
13
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
/* Create a reliable, stream socket using TCP */ if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed");
![Page 14: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/14.jpg)
14
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
echoServAddr.sin_family = AF_INET; /* Internet address family */ echoServAddr.sin_addr.s_addr = inet_addr(servIP); /* Server IP address */ echoServAddr.sin_port = htons(echoServPort); /* Server port */
if (connect(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) DieWithError("connect() failed");
![Page 15: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/15.jpg)
15
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
echoStringLen = strlen(echoString); /* Determine input length */
/* Send the string to the server */ if (send(sock, echoString, echoStringLen, 0) != echoStringLen) DieWithError("send() sent a different number of bytes than expected");
![Page 16: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/16.jpg)
16
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
/* Receive message from client */ if ((recvMsgSize = recv(clntSocket, echoBuffer, RCVBUFSIZE, 0)) < 0) DieWithError("recv() failed");
![Page 17: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/17.jpg)
17
TCP Client/Server Interaction
Client1. Create a TCP socket2. Establish connection3. Communicate4. Close the connection
Server1. Create a TCP socket2. Bind socket to a port3. Set socket to listen4. Repeatedly:
a. Accept new connectionb. Communicatec. Close the connection
close(sock); close(clntSocket)
![Page 18: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/18.jpg)
18
TCP Tidbits
Clientsend(“Hello Bob”)
recv() -> “Hi Jane”
Server
recv() -> “Hello ”recv() -> “Bob”send(“Hi ”)send(“Jane”)
Client knows server address and port No correlation between send() and recv()
![Page 19: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/19.jpg)
19
Closing a Connection
close() used to delimit communication Analogous to EOF
Clientsend(string)
while (not received entire string)recv(buffer)send(buffer)
close(socket)
Server
recv(buffer)while(client has not closed
connection)send(buffer)recv(buffer)
close(client socket)
![Page 20: 1 Writing Network Applications using the TCP/IP Protocol Stack: Socket Programming.](https://reader036.fdocuments.in/reader036/viewer/2022071807/56649ed05503460f94bde6ab/html5/thumbnails/20.jpg)
20
UDP Client/Server Interaction
Client1. Create a UDP socket2. Communicate
(send/receive messages)3. When done, close the
connection
Server1. Create a UDP socket2. Assign a port to socket3. Communicate (receive/send
messages)4. When done, close the socket
Server starts by getting ready to receive client messages…