Lab 1

Last update: 05.10.2024 12:45:00

This lab aims to teach you how to encode data for over the network exchange. This is a vital aspect in network communication as different data types require different types of encodings when exchanged over a TCP/IP network. These data representations are not required by the functioning of the network itself, but merely by the heterogeneous nature of the end systems. Depending on their architecture, end nodes might have different in memory data representation schemas.

The network stack implements data exchange as a stream/array/packet of bytes. Practically this means that the network is unaware of any data typing.

When sending data, the network stack reads it from a memory address unaware of its representation on the host computer. It reads a number of bytes from the memory address and it sends those bytes over the network and lays them on the destination computer at the provided address in the same order. This could be a problem on systems with different endianness, etc as data type layouts in memory are different on different platforms.

Solutions to address the above issue are handled in multiple ways:

·         Using Host to Network and Network to Host functions (htonl, ntohl, etc)

·         Transforming the data representation into a common format (ex: a string of chars). Depending on the case this might not be optimal.

 

Do you know about any other issues you might encounter when exchanging data over the network? (When answering consider the network to be reliable: whatever is transmitted on one end successfully arrives in a finite amount of time on the other side).

 

Implement a pair of client/server apps communicating trough TCP/IP (TCP sockets) for solving the following problems (try to handle all errors and communication issues) :

 

1.   A client sends to the server an array of numbers. Server returns the sum of the numbers.

2.   A client sends to the server a string. The server returns the count of spaces in the string.

3.   A client sends to the server a string. The server returns the reversed string to the client (characters from the end to begging)

4.   The client sends to the server two sorted array of chars. The server will merge sort the two arrays and return the result to the client.

5.   The client sends to the server an integer. The server returns the list of divisors for the specified number.

6.   The client sends to the server a string and a character. The server returns to the client a list of all positions in the string where specified character is found.

7.   The client sends to the server a string and two numbers (s, I, l). The sever returns to the client the substring of s starting at index I, of length l.

8.   The client sends to the server two arrays of integers. The server returns an arrays containing the common numbers found in both arrays.

9.   The client sends to the server two arrays of numbers. The server returns to the client a list of numbers that are present in the first arrays but not in the second.

10.The client sends to the server two strings. The server sends back the character with the largest number of occurrences on the same positions in both strings together with its count.

11.Define a simple structure (e.g., a Person object with firstname, lastname, gender  and age). The client sends this structure to the server. The server increments the age and sends the updated structure back.

12.The client sends a date string in YYYY-MM-DD format. The server returns the day of the week corresponding to that date.

13.The client sends a small text file to the server. The server saves the file and returns the length of the received file content as an unsigned integer

14.The client sends an array of boolean values. The server counts how many true values are in the array and returns the count..

 

Students should practice when solving these problems: strace and ltrace system commands.

 

Example - iterative server using TCP sockets - Sum Server

Example Python - Client for Sum Server

 

General Sockets Theory and References