Implementation of net_client entity

net_client.c

#include <netdb.h>

#include <netinet/in.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/select.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <unistd.h>

int main(int argc, const char *argv[])

{

/* Create socket for connection with server. */

int clientSocketFD = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (-1 == clientSocketFD)

{

perror("cannot create socket");

return EXIT_FAILURE;

}

/* Create and initialize socket address structure for connection with server. */

struct sockaddr_in stSockAddr;

memset(&stSockAddr, 0, sizeof(stSockAddr));

stSockAddr.sin_family = AF_INET;

stSockAddr.sin_port = htons(1103);

struct addrinfo hints;

memset(&hints, 0, sizeof(struct addrinfo));

hints.ai_family = AF_INET;

hints.ai_socktype = SOCK_STREAM;

struct addrinfo *resultHints = NULL;

int res = getaddrinfo("localhost", NULL, &hints, &resultHints);

if (res != 0)

{

perror("cannot get address info");

close(clientSocketFD);

return EXIT_FAILURE;

}

struct sockaddr_in* in_addr = (struct sockaddr_in *)resultHints->ai_addr;

memcpy(&stSockAddr.sin_addr.s_addr, &in_addr->sin_addr.s_addr, sizeof(in_addr_t));

freeaddrinfo(resultHints);

/* Wait for short period until server is ready for

incoming connection requests. */

sleep(1);

/* Create connection with server. */

if (-1 == connect(clientSocketFD, (struct sockaddr *)&stSockAddr, sizeof(stSockAddr)))

{

perror("connect failed");

close(clientSocketFD);

return EXIT_FAILURE;

}

char buf[] = "Hello!\n";

/* Send data to server. */

if (-1 == send(clientSocketFD,buf,strlen(buf) + 1,0))

{

perror("send failed");

close(clientSocketFD);

return EXIT_FAILURE;

}

else

{

/* Print data sent to server to stdout. */

fprintf(stdout, "net_client sent: %s", buf);

}

/* Flush internal buffer. */

fflush(stdout);

/* Close connection with server. */

shutdown(clientSocketFD, SHUT_RDWR);

close(clientSocketFD);

return EXIT_SUCCESS;

}

Page top