Lecture # 23 - Systems and Network Programming

House keeping items:

Lecture 23 (4/08): Section 2 (2:15pm) - video

Lecture 23 (4/08): Section 1 (5:15pm) - video

Lecture 22 (4/06): Section 2 (2:15pm) - video

Lecture 22 (4/06): Section 1 (5:15pm) - video

*** Notices ***

Agenda for Today (04/08/20):

Lecture # 23

Project 2 helpers: *** Please See Project 2 Statement for instructions *** Project 2 statement

***Note:*** I’ve given lots of help.
All that you need to do to complete Project 2 is to supply remaining the code required in Messenger.cpp Specifically, you need complete functions:
MessageHandler::AppProc() and
bool SendMessage(const Message &message, const EndPoint &dstPeerEP)

Download Project 2 helper code here

For insight view the test stubs (bottom) of files: Sender.cpp and Receiver.cpp to see how you might implement these functions.
You are not required to use my helper code! You can build all of your own code, but you do need to meet all of requirements specified in the Project statement (see MPL (Sender/Recveiver/ClientHandler) code below).

Message Passing Library (libmpl.a)

  1. Sender Package - client-side message passing for developing TCP clients
  2. Receiver Package - server-side message passing: listening server and ClientHandler servcie host
  3. ClientHandler Package - server-side message passing class abstraction for defining custom server processing. Register with Receiver

Sockets notes:

C/C++ examples: System calls, serialization, files and I/O

    1. USNA (Systems Programming) lectures
    1. User/Kernel space, System call Overview
    2. File I/O: read, write, open system calls
    3. Process creation and termination: I/O buffering
    4. Fork, Exec system calls, Process management
    5. Process Scheduling
    2. Previous (Lecture 15) Notes and C/C++ Presentation Materials
    1. C/C++ Introduction: Mike C. notes
    2. C++ Survival Guide (basic syntax notes and important concepts): Dr. Fawcett
    3. C and C++ compilation, memory, and computation models
    4. Assessment of the C++
    5. Discussion on the elements that comprise C and C++
    6. Discussion on Packages and Modularity
    7. Important linux/system header files
    8. The structure and data flow in sytems is often documented with standard UML diagramming: You should be aware of it
    3. Code Examples from 03/02 and 03/04
    1. Demo stdout/stderr file streams, write system call
    2. Demo Pass by value, Pass by reference, basic pointers and memory allocation (new/delete, malloc/free)
    3. Demo C-style strings
    4. Demo C++ std::strings
    5. Demo File I/O in C (fopen/fgetc/fprintf,read lines, memory allocation with malloc etc.) Reading/Writing Text Files: C example
    6. Demo File I/O in C++ (ifsteam/ofstream streams: Reading/Writing Text Files: C++ example
    7. Demo structs, serialization, reading/writing binary files: C++ example
    8. Demo reading/writing binary files in C (glibc: fopen/fread/fwrite/fseek etc) C example
    9. Demo reading/writing binary files in C++ (fstream library: command line args, ifstream/oftstream etc.) C example
    4. Type Serialization/Deserialization example 5. C Package example for HW # 7 6. Example of a real C++ package - supports linux file and directory operations (prior to C++ 17 file system) 7. Lecture 14 Examples: Download
  • Note: You will need C and C++ compilers
    • I will use GNU C/C++ (gcc/g++). The Linux Minit distro comes with gcc installed by default, but not g++
    • Install g++ with the following command (Open terminal and type): sudo apt-get install g++
    • You can install and use gcc/g++ on your Mac computer. Use this is option if you don't have a Linux distro
  • Code (C and C++ tutorial) Resources:

    1. Really Nice C tutorial
    2. Excellent C Programming Tutorial: Tutorialpoint
    3. Another Excellent C Programming Tutorial(divided in basic and advanced topics): Learn-C.org
    4. One of the best C++ tutorials I've seen: cpluspluss.com
    5. Dr. Fawcett's Page on Getting Started with C++
    6. A very good C++ tutorial: LearnCpp.com
    7. Program memory layout
    8. Pointers Tutorial
    9. Stat system call
    10. Stat man page
    11. Compiling Programs using make (chapter 23): linux command line
    12. Lectures from a well thought out systems programming course at USNA
    13. Compilation, Linking and Loading article
    14. A series of Systems Programming lectures from U.S. Naval Academy (USNA)

    Dr. Fawcett's developed resources:

    Dr. Fawcett taught graduate software design courses here at Syracuse from 1990 - Spring 2019. Most of my software training was here at SU in Dr. Fawcett's courses from 2005-2019. In retirement he is continuing to develop (current) software training materials, most of which is hosted in his new github website available via the URLs below.

    1. The C++ story provides detailed coverage of the C++ language: specifically how to utilize the language and its features effectively. The intent of the story is to meet people on individual level of experience. Beginning C++ programmers can begin to get handle on using the language, while experienced programmers can get detailed insight into the more advanced aspects.
      View the C++ story here

    2. A series of the C++ videos corresponding to the C++ story
      can be viewed here

    3. Previously taught (Spring 2019) graduate Object-oriented Design course using C++

    Environment Setup Notes:

    1. Install VirtualBox
    2. Install Linux Mint (based on Ubuntu -- I prefer MATE desktop, but many people like Cinnamon)
      • Desktop Comparisons: MATE versus Cinnamon
      • Install Guest Additions - device drivers and system applications that optimize the guest operating system for better performance and usability.
    3. Enable "Shared Clipboard and Drag'nDrop": Settings -> Advanced
    4. Configure shared folders, then run the following commands..
      1. run: sudo usermod -a -G vboxsf `whoami`
      2. run: sudo chown -R `whoami`:users name-of-mount-point
      3. log out, and log back in
    5. Update Mint (run): "sudo apt update && sudo apt upgrade -y"

    Interesting Technologies related to Linux:

    1. Kernel-based Virtual Machine (KVM) - turn Linux into a Hypervisor
    2. Docker (Container Technology)
    3. TCPDump & LIBPCAP
    4. Extended Berkeley Packet Filter (eBPF)