csci 330 unix and network programming unit xvi: tcp server programming
DESCRIPTION
TCP programming provides multiple endpoints on a single node: port common abstraction: socket socket is end-point of communication link identified as IP address + port number can receive data can send data 3CSCI UNIX and Network ProgrammingTRANSCRIPT
![Page 1: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/1.jpg)
CSCI 330UNIX and Network Programming
Unit XVI: TCP Server Programming
![Page 2: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/2.jpg)
2
Unit Overview• TCP client & server programming
• add DNS lookup: basicClient
• server fork to process client request
• example TCP server• list files in directory specified
CSCI 330 - UNIX and Network Programming
![Page 3: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/3.jpg)
TCP programming• provides multiple endpoints on a single node: port• common abstraction: socket
• socket is end-point of communication link• identified as IP address + port number• can receive data• can send data
3CSCI 330 - UNIX and Network Programming
![Page 4: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/4.jpg)
Socket system calls4
Primitive Meaning
socket Create a new communication endpoint
bind Attach a local address to a socket
listen Announce willingness to accept connections
accept Block caller until a connection request arrives
connect Actively attempt to establish a connection
write Send(write) some data over the connection
read Receive(read) some data over the connection
close Release the connection
server client
CSCI 330 - UNIX and Network Programming
![Page 5: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/5.jpg)
TCP server illustration5CSCI 330 - UNIX and Network Programming
![Page 6: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/6.jpg)
TCP client illustration6CSCI 330 - UNIX and Network Programming
![Page 7: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/7.jpg)
Illustration: Basic TCP request client7CSCI 330 - UNIX and Network Programming
![Page 8: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/8.jpg)
Review: TCP Server basic logicwhile (true) { connSock = accept(sock, ...);
// process client’s request // via connSock
close(connSock);}
8CSCI 330 - UNIX and Network Programming
![Page 9: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/9.jpg)
TCP Server fork• server starts loop
• blocks on accept for connection from client• after accept:
• accept returns dedicated connection socket• server forks to service client request
• parent process• closes dedicated connection socket• continues to block for next accept
• child process• serves client request• communicates with client via dedicated connection socket
9CSCI 330 - UNIX and Network Programming
![Page 10: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/10.jpg)
TCP Server fork: logicwhile (true) { connSock = accept(sock, ...); if (fork()) { // parent process close(connSock); } else { // child process // process client’s request via connSock ...
}}
10CSCI 330 - UNIX and Network Programming
![Page 11: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/11.jpg)
TCP server/fork illustration11CSCI 330 - UNIX and Network Programming
![Page 12: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/12.jpg)
TCP server/fork illustration12CSCI 330 - UNIX and Network Programming
![Page 13: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/13.jpg)
Server example: list directory• after accept, server forks to service client request
• parent process will continue to block on new accept
• child process serves client request• open directory• read directory entries
13CSCI 330 - UNIX and Network Programming
![Page 14: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/14.jpg)
Server child: processClientRequest14CSCI 330 - UNIX and Network Programming
![Page 15: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/15.jpg)
TCP server: opendir detail// open directoryDIR *dirp = opendir(path);if (dirp == 0) {
// duplicate socket descriptor into error outputclose(2);dup(connSock);perror(path);exit(EXIT_FAILURE);
}
15CSCI 330 - UNIX and Network Programming
![Page 16: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/16.jpg)
TCP server: readdir detailwhile ((dirEntry = readdir(dirp)) != NULL) {
strcpy(buffer, dirEntry->d_name);strcat(buffer, "\n");size = strlen(buffer);if (write(connSock, buffer, size) != size) {
perror("Mismatch in number of bytes");exit(EXIT_FAILURE);
}cerr << "sent: " << buffer;
}
16CSCI 330 - UNIX and Network Programming
![Page 17: CSCI 330 UNIX and Network Programming Unit XVI: TCP Server Programming](https://reader034.vdocuments.us/reader034/viewer/2022051302/5a4d1b547f8b9ab0599a8ead/html5/thumbnails/17.jpg)
17
Summary• TCP server programming• server fork to process client request
CSCI 330 - UNIX and Network Programming