Taken from the original at http://www.ecst.csuchico.edu/~beej/guide/net/ ... see end of writeup for Copyright statement.

A Simple Stream Client

This guy's even easier than the server. All this client does is connect to the host you specify on the command line, port 3490. It gets the string that the server sends.

The client source:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h> 
#include <netinet/in.h>
#include <sys/socket.h>

#define PORT 3490    /* the port client will be connecting to */

#define MAXDATASIZE 100 /* max number of bytes we can get at once */

int main(int argc, char *argv[])
  int sockfd, numbytes;
  char buf[MAXDATASIZE];
  struct hostent *he;
  struct sockaddr_in their_addr; /* connector's address information */

  if (argc != 2) {
    fprintf(stderr, "usage: client hostname\n");

  if ((he=gethostbyname(argv[1])) == NULL) {  /* get the host info */

  if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

  their_addr.sin_family = AF_INET;      /* host byte order */
  their_addr.sin_port = htons(PORT);    /* short, network byte order */
  their_addr.sin_addr = *((struct in_addr *)he-<h_addr);
  bzero(&(their_addr.sin_zero), 8);     /* zero the rest of the struct */

  if (connect(sockfd, (struct sockaddr *)&their_addr, \
      sizeof(struct sockaddr)) == -1) {

  if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1) {

  buf[numbytes] = '\0';

  printf("Received: %s", buf);


  return 0;

Notice that if you don't run the server before you run the client, connect() returns "Connection refused". Very useful.

Prev | Up | Next

Copyright © 1995, 1996 by Brian "Beej" Hall. This guide may be reprinted in any medium provided that its content is not altered, it is presented in its entirety, and this copyright notice remains intact. Contact beej@ecst.csuchico.edu for more information.