0% found this document useful (0 votes)
4 views

Code Explanation Triangle

The document explains a server-client application in C that generates and sends a triangle pattern based on user input. The server initializes Winsock, creates a socket, listens for connections, and sends a triangle to the client after receiving a number. The client connects to the server, sends a number, and receives the generated triangle to display it on the console.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Code Explanation Triangle

The document explains a server-client application in C that generates and sends a triangle pattern based on user input. The server initializes Winsock, creates a socket, listens for connections, and sends a triangle to the client after receiving a number. The client connects to the server, sends a number, and receives the generated triangle to display it on the console.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

Server Code Explanation

#include <stdio.h>

#include <stdlib.h>

#include <winsock2.h>

#include <ws2tcpip.h>

• Include Headers: These headers provide necessary functions for standard


input/output, memory management, and Windows socket programming.

#pragma comment(lib, "ws2_32.lib")

• Link Library: This directive tells the linker to include the Winsock library, which is
necessary for socket operations.

void generateAndSendTriangle(SOCKET client_socket, int rows) {

• Function Declaration: This function generates a triangle pattern and sends it to the
connected client.

char triangle[200];

int index = 0;

• Buffer and Index: triangle stores the generated triangle string, and index tracks the
position in the string.

for (int i = 1; i <= rows; i++) {

• Outer Loop: Iterates through each row of the triangle.

for (int j = 1; j <= i; j++) {

• Inner Loop: Iterates through each column in the current row.

triangle[index++] = '*';
triangle[index++] = ' ';

• Add Characters: Appends a star and a space to the triangle string.

triangle[index++] = '\n';

• New Line: Adds a newline character after completing a row.

send(client_socket, triangle, index, 0);

• Send Data: Sends the generated triangle string to the client, using only the filled portion
of the buffer.

int main() {

• Main Function: Entry point of the server program.

WSADATA wsaData;

WSAStartup(MAKEWORD(2, 2), &wsaData);

• Initialize Winsock: Prepares Winsock for use, checking that the library is available.

char buf[200];

• Buffer for Receiving Data: This will store data received from the client.

SOCKET server_socket;

server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

• Create Server Socket: Initializes a TCP socket for the server.

c
struct sockaddr_in server_address;

• Socket Address Structure: Defines the server's address, including IP family, port, and
IP address.

server_address.sin_family = AF_INET;

server_address.sin_port = htons(3001);

server_address.sin_addr.s_addr = INADDR_ANY;

• Set Address Parameters: Specifies the address family (IPv4), the port number (3001),
and allows the server to accept connections from any IP address.

bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address));

• Bind Socket: Associates the socket with the specified address and port.

listen(server_socket, 5);

• Listen for Connections: Puts the socket in listening mode, allowing up to 5 pending
connections.

SOCKET client_socket = accept(server_socket, NULL, NULL);

• Accept Connection: Waits for a client to connect and creates a new socket for that
client.

printf("Connection successful!\n");

• Confirmation Message: Notifies that a client has connected successfully.

char request[] = "Enter a number: ";

send(client_socket, request, sizeof(request), 0);


• Send Request: Sends a prompt to the client asking for a number.

recv(client_socket, buf, sizeof(buf), 0);

• Receive Input: Reads the number entered by the client into the buf buffer.

int rows = atoi(buf);

• Convert to Integer: Converts the received string to an integer to determine the number
of rows for the triangle.

generateAndSendTriangle(client_socket, rows);

• Generate Triangle: Calls the function to create and send the triangle pattern to the
client.

closesocket(client_socket);

closesocket(server_socket);

• Close Sockets: Releases the resources associated with the client and server sockets.

WSACleanup();

• Clean Up Winsock: Cleans up and releases resources allocated by Winsock.

return 0;

• End of Main: Returns 0, indicating successful execution of the program.


Client Code Explanation

#include <stdio.h>

#include <stdlib.h>

#include <winsock2.h>

#include <ws2tcpip.h>

• Include Headers: Similar to the server, these headers are required for standard I/O and
Windows socket programming.

#pragma comment(lib, "ws2_32.lib")

• Link Library: Ensures the Winsock library is linked for the client application.

int main() {

• Main Function: Entry point of the client program.

WSADATA wsaData;

WSAStartup(MAKEWORD(2, 2), &wsaData);

• Initialize Winsock: Initializes the Winsock library for use.

char request[256];

char buf[200];

• Buffers: request for sending user input and buf for receiving the server's message.

SOCKET sock;

sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


• Create Client Socket: Initializes a TCP socket for the client.

struct sockaddr_in server_address;

• Socket Address Structure: Defines the server's address to which the client will
connect.

server_address.sin_family = AF_INET;

server_address.sin_addr.s_addr = inet_addr("127.0.0.1");

server_address.sin_port = htons(3001);

• Set Address Parameters: Configures the socket to use IPv4, connects to localhost
(127.0.0.1), and uses port 3001.

if (connect(sock, (struct sockaddr*)&server_address, sizeof(server_address)) ==


SOCKET_ERROR) {

• Connect to Server: Attempts to connect to the specified server address.

perror("Connection unsuccessful");

closesocket(sock);

WSACleanup();

exit(EXIT_FAILURE);

• Error Handling: If the connection fails, prints an error message, closes the socket,
cleans up Winsock, and exits the program.

printf("Connection successful!\n");

• Confirmation Message: Notifies that the connection to the server was successful.

c
recv(sock, buf, sizeof(buf), 0);

printf("%s", buf);

• Receive Message: Reads the server's request message and prints it to the console.

fgets(request, sizeof(request), stdin);

send(sock, request, sizeof(request), 0);

• Get User Input: Reads a number from standard input and sends it to the server.

char triangle[200];

recv(sock, triangle, sizeof(triangle), 0);

printf("%s", triangle);

• Receive Triangle: Receives the triangle pattern from the server and prints it.

closesocket(sock);

WSACleanup();

• Close Socket and Clean Up: Releases the resources associated with the socket and
cleans up Winsock.

return 0;

• End of Main: Returns 0, indicating successful execution of the program.

You might also like