Network Socket Client Example
Check input arguments, exit on error. Open an INET, STREAM socket, exit on error. Get the server host name, exit on error. Configure and connect the socket to the server address and port, exit on error. Display on screen that you are waiting for input and read a new text line from the keyboard. Send the entered text to the socket. Read a response from the socket and print it. Close the socket.
network-socket-client.c
#include<string.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<strings.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#define BUF_SIZE 256
int main(int argc, char ** argv)
{
// Arguments Check!
if (argc != 3)
{
printf("Usage: %s <ip_address> <port_number>\n", argv[0]);
return EXIT_FAILURE; // return -1;
}
// Socket Create
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
printf("Socket Create Error: %d\n", errno);
return EXIT_FAILURE; // return -1;
}
// Server IP Address
struct in_addr addr;
inet_aton(argv[1], &addr);
struct hostent *server = gethostbyaddr(&addr, sizeof(addr), AF_INET);
if (server == NULL)
{
printf("Host Not Found Error: %d\n", errno);
return EXIT_FAILURE; // return -1;
}
// Server Address
struct sockaddr_in serv_addr;
memset((char *) &serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
strncpy((char *)&serv_addr.sin_addr.s_addr, (char *)server->h_addr, server->h_length);
serv_addr.sin_port = htons(atoi(argv[2]));
// Socket Connect
if (connect(sock, (const struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
{
printf("Socket Connect Error: %d", errno);
return EXIT_FAILURE; // -1
}
// Socket Write/Read
printf("Write the message and press [Enter] to send:\n");
char buf[BUF_SIZE];
memset(buf, 0, BUF_SIZE);
fgets(buf, BUF_SIZE-1, stdin);
write(sock, buf, strlen(buf));
memset(buf, 0, BUF_SIZE);
read(sock, buf, BUF_SIZE-1);
printf("Received: %s\n",buf);
close(sock);
return EXIT_SUCCESS; // return 0;
}Last updated
Was this helpful?