TCP Client-Server Communication to Identify Matrix Type (Upper/Lower/Diagonal)

 

Experiment

TCP Client-Server Communication to Identify Matrix Type (Upper/Lower/Diagonal)


Aim

To implement a TCP client-server program where the client sends a randomly generated square matrix to the server, and the server determines its type (upper triangular, lower triangular, or diagonal).


Objective

  • To understand structured data transmission over TCP
  • To implement client-server communication using sockets in C
  • To perform matrix analysis at the server side

Theory

TCP Communication

TCP provides:

  • Reliable communication
  • Ordered data transfer
  • Error detection and retransmission

Matrix Types

Let A[i][j]A[i][j] be a square matrix:

  • Upper Triangular Matrix
    All elements below diagonal are zero
    ๐Ÿ‘‰ i>jA[i][j]=0i > j \Rightarrow A[i][j] = 0
  • Lower Triangular Matrix
    All elements above diagonal are zero
    ๐Ÿ‘‰ i<jA[i][j]=0i < j \Rightarrow A[i][j] = 0
  • Diagonal Matrix
    All non-diagonal elements are zero
    ๐Ÿ‘‰ ijA[i][j]=0i \ne j \Rightarrow A[i][j] = 0

Algorithm

Client

  1. Input integer N
  2. Generate N x N matrix with random values (1–50)
  3. Display matrix
  4. Send N to server
  5. Send matrix elements
  6. Receive matrix type
  7. Display result

Server

  1. Create socket
  2. Bind and listen
  3. Accept connection
  4. Receive N
  5. Receive matrix
  6. Check matrix type
  7. Send result to client
  8. Close connection

๐Ÿ’ป Program


๐Ÿ”น Client Program (C)

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 12345 int main() { int sock; struct sockaddr_in serv_addr; int N, matrix[10][10]; sock = socket(AF_INET, SOCK_STREAM, 0); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(PORT); serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); printf("Enter order of matrix (N): "); scanf("%d", &N); srand(time(0)); printf("\nGenerated Matrix:\n"); for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { matrix[i][j] = rand() % 51 ; // filling with 0 to 50 printf("%3d ", matrix[i][j]); } printf("\n"); } // Send N send(sock, &N, sizeof(N), 0); // Send matrix send(sock, matrix, sizeof(matrix), 0); char result[50]; recv(sock, result, sizeof(result), 0); printf("\nMatrix Type: %s\n", result); close(sock); return 0; }

๐Ÿ”น Server Program (C)

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 12345 int main() { int server_fd, new_socket; struct sockaddr_in address; int addrlen = sizeof(address); int N, matrix[10][10]; server_fd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); bind(server_fd, (struct sockaddr *)&address, sizeof(address)); listen(server_fd, 3); printf("Server waiting...\n"); new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen); // Receive N recv(new_socket, &N, sizeof(N), 0); // Receive matrix recv(new_socket, matrix, sizeof(matrix), 0); int upper = 1, lower = 1, diagonal = 1; for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { if(i > j && matrix[i][j] != 0) upper = 0; if(i < j && matrix[i][j] != 0) lower = 0; if(i != j && matrix[i][j] != 0) diagonal = 0; } } char result[50]; if(diagonal) strcpy(result, "Diagonal Matrix"); else if(upper) strcpy(result, "Upper Triangular Matrix"); else if(lower) strcpy(result, "Lower Triangular Matrix"); else strcpy(result, "Not a special matrix"); send(new_socket, result, strlen(result)+1, 0); close(new_socket); close(server_fd); return 0; }

▶️ Compilation & Execution

gcc server.c -o server gcc client.c -o client

Run:

  • Terminal 1 → ./server
  • Terminal 2 → ./client

๐Ÿ“Œ Sample Output

Client

binuvp@debian-workstation:~/nw$ ./client Enter order of matrix (N): 2 Generated Matrix: 44 13 31 6 Matrix Type: Not a special matrix

Server

Server waiting...

Result

The TCP client-server program successfully transmitted a matrix and correctly identified its type at the server side.

Comments

Popular posts from this blog

Networks Lab PCCSL507 Semester 5 KTU CS 2024 Scheme - Dr Binu V P

Analysis of HTTP Protocol using Wireshark

Study and Use of ifconfig Command