Files
qotd/client/main.c
T
2025-03-02 09:59:52 +01:00

78 lines
1.9 KiB
C

#include <arpa/inet.h> // inet_addr()
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h> // bzero()
#include <sys/socket.h>
#include <unistd.h> // read(), write(), close()
#include <errno.h>
#include <stdbool.h>
#include "config.h"
void unescape(char *buffer, size_t buf_len)
{
int i;
bool last_is_escape = false;
for (i = 0; i < buf_len; i++)
{
if (last_is_escape)
{
switch (buffer[i])
{
case 'n':
buffer[i - 1] = ' ';
buffer[i] = '\n';
}
}
if (buffer[i] == '\\')
{
last_is_escape = true;
}
else
{
last_is_escape = false;
}
}
}
int main()
{
int sockfd, connfd;
struct sockaddr_in servaddr4, cli;
unsigned int servaddrlength;
// socket create and verification
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
{
printf("socket creation failed...\n");
exit(1);
}
// assign IP, PORT
servaddr4.sin_family = AF_INET;
servaddr4.sin_addr.s_addr = inet_addr("45.81.62.108");
servaddr4.sin_port = htons(DEFAULT_LISTEN_PORT);
int status = connect(sockfd, (struct sockaddr *)&servaddr4, sizeof servaddr4);
// connect the client socket to server socket
if (status != 0)
{
printf("%i\n", errno);
printf("connection with the server failed...\n");
exit(0);
}
struct sockaddr *servaddr = (struct sockaddr *)&servaddr4;
unsigned int ss = sizeof servaddr;
// function for chat
char clientMessage[MESSAGE_STRING_LENGTH] = {0};
recvfrom(sockfd, clientMessage, MESSAGE_STRING_LENGTH, 0, servaddr, &ss);
unescape(clientMessage, (size_t)MESSAGE_STRING_LENGTH);
puts(clientMessage);
// close the socket
close(sockfd);
}