gtpc1m70Transmission Control Protocol/Internet Protocol

Transmission Control Protocol (TCP) Server

/**********************************************************/
/* This is a stream socket server sample program that     */
/* accepts a connect request from a client program.       */
/* When a message from the client program is received,    */
/* the TCP server program echoes back the message to the  */
/* client program.                                        */
/**********************************************************/
 
 
/**********************************************************/
/* TPF Standard Header Files                              */
/**********************************************************/
#include <tpfeq.h>
#include <tpfio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#include <socket.h>             /* Socket API Header File */
 
#define return_error        -1
 
#define MAX_BUFFER_LEN       1024
 
qxyd()
{
  struct sockaddr_in server_sockaddr_in, name_sockaddr_in;
 
  char *recv_client_msg;
  char server_name[50];
 
  int client_sock;
  int echo_len;
  int rc;
  int server_sock;
  int sockaddr_in_length;
 
 
  recv_client_msg = malloc(MAX_BUFFER_LEN);
  sockaddr_in_length = sizeof(struct sockaddr_in);
 
  /**************************/
  /* Create a stream socket.*/
  /**************************/
  server_sock = socket(AF_INET,SOCK_STREAM,0);
  if (server_sock == return_error)
  {
    printf("Error in opening stream socket\n");
    exit(0);
  }
 
  /***********/
  /* Bind it.*/
  /***********/
  server_sockaddr_in.sin_family      = AF_INET;
  server_sockaddr_in.sin_addr.s_addr = INADDR_ANY;
  server_sockaddr_in.sin_port        = 5003;
  rc = bind(server_sock,(struct sockaddr *)&server_sockaddr_in,
                         sockaddr_in_length);
  if (rc == return_error)
  {
    printf("Error in binding stream - %d\n",sock_errno());
    close(server_sock);
    exit(0);
  }
 
  /********************************/
  /* Listen to any socket clients.*/
  /********************************/
  rc = listen(server_sock,5);
  if (rc == return_error)
  {
    printf("Error in listening client socket - %d\n",sock_errno());
    close(server_sock);
    exit(0);
  }
 
  /**********************************************/
  /* Call gethostname to obtain the server name */
  /**********************************************/
  rc = gethostname(server_name,sizeof(server_name));
  if (rc == return_error)
  {
    printf("Error in getting host name - %d\n",sock_errno());
  }
 
  /********************************/
  /* Print out server information.*/
  /********************************/
  printf("\nServer Information\n");
  printf("-----------------------------------\n");
  printf("Socket        = %d\n",server_sock);
  printf("Host ID       = %x\n",gethostid());
  printf("Host Name     = %s\n",server_name);
  printf("Host Family   = %x\n",name_sockaddr_in.sin_family);
  printf("Host Address  = %x\n",name_sockaddr_in.sin_addr.s_addr);
  printf("Host Port No  = %d\n",name_sockaddr_in.sin_port);
  printf("-----------------------------------\n\n");
 
  /******************************************************************/
  /* Accept a socket client.                                        */
  /******************************************************************/
  client_sock = accept(server_sock,(struct sockaddr *)&name_sockaddr_in,
                       &sockaddr_in_length);
  if (client_sock == return_error)
  {
    printf("Cannot accept any new clients - %d\n",sock_errno());
    close(server_sock);
    exit(0);
  }
 
  /********************************/
  /* Print out client information.*/
  /********************************/
  printf("Client Information\n");
  printf("-----------------------------------\n");
  printf("Socket            = %d\n",client_sock);
  printf("Client Family     = %x\n",name_sockaddr_in.sin_family);
  printf("Client Address    = %x\n",name_sockaddr_in.sin_addr.s_addr);
  printf("Client Port No    = %d\n",name_sockaddr_in.sin_port);
  printf("-----------------------------------\n");
 
  /**********************************************************/
  /* Read client's message to find out how many messages the*/
  /* server is receiving.                                   */
  /**********************************************************/
  echo_len = read(client_sock,recv_client_msg,MAX_BUFFER_LEN);
  if (echo_len == return_error)
  {
    printf("Error in reading message - %d\n",sock_errno());
    (void)close(client_sock);
    (void)close(server_sock);
    exit(0);
  }
  else
  {
    printf("messages = %s\n",recv_client_msg);
  }
 
  rc = write(client_sock,recv_client_msg,echo_len);
  if (rc == return_error)
  {
    printf("Error in sending echo - %d\n",sock_errno());
    (void)close(client_sock);
    (void)close(server_sock);
    exit(0);
  }
 
  /*************************************************************/
  /* Shutdown the communication link between client and server.*/
  /*************************************************************/
  rc = shutdown(client_sock,2);
  if (rc == return_error)
  {
    printf("Error in shutting down the client - %d\n",
           sock_errno());
  }
 
  /*********************************************/
  /* Clean up all sockets and exit the program.*/
  /*********************************************/
  rc = close(client_sock);
  if (rc == return_error)
  {
    printf("Error in closing client socket - %d\n",sock_errno());
  }
 
  (void)close(server_sock);
  printf("Terminated communication normally\n");
  exit(0);
}