gtpc1m71 | Transmission Control Protocol/Internet Protocol |
/******************************************************************/
/* This is a stream socket client sample program that sends a */
/* connect socket API request to the server program to bring up */
/* the connection between the server and client. The TCP server */
/* also sends a message and receives an echo from the server. */
/******************************************************************/
#include <tpfeq.h>
#include <tpfio.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <types.h>
#include <socket.h>
#define MAX_BUFFER_LEN 1024
#define NUM_PARAMETER 4
#define SEND_MSG_LEN 5
#define return_ok 0
#define return_error -1
#define read_buffer 0
#define use_previous_buffer 1
qxyh(char *argv[], u_short num_arg)
{
struct sockaddr_in client_sockaddr_in;
struct sockaddr_in server_sockaddr_in;
char *recv_client_message;
char *send_client_message;
short dest_portnum;
int client_sock;
int dest_address;
int rc;
int sockaddr_in_length;
/**********************************************/
/* Check the argument count. */
/**********************************************/
if (num_arg != NUM_PARAMETER)
{
printf("Invalid parameters :\n");
printf("ztest sock client stream block <server IP addr> \
<server port no.> <no. of msg> <msg size>\n");
exit(0);
}
dest_address = inet_addr(argv[0]);
dest_portnum = atoi(argv[1]);
/*****************************************/
/* Print out the client's parameter list.*/
/*****************************************/
printf("Parameter List :\n");
printf("----------------------------------\n");
printf("Dest address = %x\n",dest_address);
printf("Dest portnum = %d\n",dest_portnum);
printf("-----------------------------------\n\n");
/***************************************/
/* Initialize input/output buffer size.*/
/***************************************/
send_client_message = (char *)malloc(MAX_BUFFER_LEN);
recv_client_message = (char *)malloc(MAX_BUFFER_LEN);
sockaddr_in_length = sizeof(struct sockaddr_in);
/**************************/
/* Create a stream socket.*/
/**************************/
client_sock = socket(AF_INET,SOCK_STREAM,0);
if (client_sock == return_error)
{
printf("Error in opening a stream socket\n");
return(return_error);
}
/***************************************************************/
/* Bind a local name to the socket. When using the IP routing */
/* table, this bind API should be skipped. */
/***************************************************************/
client_sockaddr_in.sin_family = AF_INET;
client_sockaddr_in.sin_port = 0;
client_sockaddr_in.sin_addr.s_addr = 0;
rc = bind(client_sock,(struct sockaddr *)&client_sockaddr_in,
sockaddr_in_length);
if (rc == return_error)
{
printf("Error in binding - %d\n",sock_errno());
rc = close(client_sock);
exit(0);
}
/********************************/
/* Print out client information.*/
/********************************/
printf("Client Information\n");
printf("-----------------------------------\n");
printf("Client sock = %d\n",client_sock);
rc = getsockname(client_sock,(struct sockaddr *)&client_sockaddr_in,
&sockaddr_in_length);
if (rc == return_ok)
{
printf("Client Address =%x\n",client_sockaddr_in.sin_addr.s_addr);
printf("Client Port No = %d\n",client_sockaddr_in.sin_port);
}
printf("-----------------------------------\n\n");
/*******************************************/
/* Connect to a connection-oriented server.*/
/*******************************************/
server_sockaddr_in.sin_family = AF_INET;
server_sockaddr_in.sin_port = dest_portnum;
server_sockaddr_in.sin_addr.s_addr = dest_address;
rc = connect(client_sock,(struct sockaddr *)&server_sockaddr_in,
sockaddr_in_length);
if (rc == return_error)
{
printf("Error in connecting - %d\n",sock_errno());
rc = close(client_sock);
exit(0);
}
printf("Server Information\n");
printf("-----------------------------------\n");
printf("Server Address = %x\n",server_sockaddr_in.sin_addr.s_addr);
printf("Server Port No = %d\n",server_sockaddr_in.sin_port);
printf("-----------------------------------\n\n");
/*****************************/
/* Send the server a message.*/
/*****************************/
(void)memset(send_client_message,'a',SEND_MSG_LEN - 1);
*(send_client_message+SEND_MSG_LEN) = 0;
rc = send(client_sock,send_client_message,SEND_MSG_LEN,0);
if (rc == return_error)
{
printf("Error in sending message - %d\n",sock_errno());
rc = close(client_sock);
exit(0);
}
else
printf("send msg = %s\n",send_client_message);
/***************************************************************/
/* Receive an echo message from the server. */
/***************************************************************/
rc = recv(client_sock,recv_client_message,MAX_BUFFER_LEN,0);
if (rc == return_error)
{
printf("Error in receiving message - %d\n",sock_errno());
rc = close(client_sock);
exit(0);
}
else
printf("recv msg = %s\n",recv_client_message);
/************************************/
/* Clean up the connection and exit */
/************************************/
rc = shutdown(client_sock,2);
if (rc == return_error)
{
printf("Error in shutting down - %d\n",sock_errno());
}
rc = close(client_sock);
if (rc == return_error)
{
printf("Error in closing the socket - %d\n",sock_errno());
exit(0);
}
printf("Terminated communication normally-stream client\n");
exit(0);
}