Simple Data Project

by: burt rosenberg
at: january 2018


It is all bits and bytes.

Overview

This project has three goals:

  1. To familiarize class participant with the tools of the course.
  2. To teach by example socket/stream coding (crash course).
  3. To exercise data representation for network communications.

The code of simplex-talk is the basis for this project. Migrate the networking code form simplex-talk into simple-data as needed. To understand this code, refer to Beej's Guide to Network Programming (thank you Brian Hall!).

Copy the [repo]/class/simple-talk folder to your folder [repo]/[user]/simplex-talk folder, compile and run. The makefile does a local run. Please read the makefile and code carefully and experiment by running the server and client on different machines in the lab.

To benefit from this code, as you migrate it, you must read it, grok it, even adore it

Finally, accomplish the task of this project. Copy the template files [repo]/[class]/proj1 to youre [repo]/[user]/proj1 folder, add and commit with message -m "initial commit". Work your changes, committing when you reach a subgoals (at least). Commit on the due date with the message -m "submitted for grading".

Man page

NAME
   simple-data-s, simple-data-c --- client/server pair to send a message and a number
      
SYNOPSIS

    simple-data-s [-vx] [-p port] [-l count]
    simple-data-c [-vx] [-p port] host message number

DESCRIPTION

   Server listens on the default port, or port given by the -p option, for a data 
   packet from the client. It prints out the message and number on separate lines and
   then repeats for count repetitions then exits. It repeats forever if count is 0,
   which is the default.
   
   Client sends a single data packet to the host at given host, with message and number
   according to the data format. Message is a text message of equal or less than 255
   bytes, and number is a four byte integer, signed, integer.
   
OPTIONS

    -l server is to receive count messages and exit. Default is 0, which means to loop forever
    -p port for client to send to, server to listen on. Default is port 5432.
    -v verbose
    -x use little endian order. Default is to use network byte order
     
ARGUMENTS

    Host, the name of the host the client will send the data packet to.
    Message, a 255 or fewer byte text message
    Number, a four-byte, signed integer.

OUTPUT
  
    Without verbose options, server is silent except for printing each message
    and number of two separate lines. The message is printed between two pipe 
    characters ("|") and any non-printable characters are printed as a dot (".").
    
HISTORY

    New for csc424-182.
    

Data format

You are to send by TCP a data packet of n+5 bytes, where n is the text message length. The first byte is n. Note that this means messages are at most 255 bytes long. The null termination byte is not sent among the characters. Immediately following the message is the number, as a 4 byte, two's complement integer in network byte order.


  0   1 2  ... n    n+1 n+2 n+3 n+4
+-----------------------------------+
|len|    message  |    number       | 
+-----------------------------------+

The number can be in little endian by the -x option.

Students often confuse a number and the "picture" of a number. The number 123 in this instance would be the value 0x7b packed network byte order into 4 bytes, 0x00, 0x00, 0x00, 0x7b. It is not the text string "123", as in the 4 byte sequence 0x31, 0x32, 0x33, 0x00.

The message need not be a string. In testing, it is hard to test a non-string message because command line arguments are necessarily strings. Students often error on their handling of the null string termination character. The string "hello" must be sent as exactly 5 characters, without the null termination character. To print the received message, the server code will put back the null terminator.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

author: burton rosenberg
created: 25 jan 2018
update: 25 jan 2018