The following C code is an example for an ONLINE client. It can be started after an ONLINE session prepared for a connect with, e.g. server/asynch.
/*
Compile with:
gcc -o client client.c
Usage, e.g.:
./client -hhasexp -p7777
*/
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
#include <ctype.h>
#include <netdb.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
int read_fd( int s, char *buffer, int len_max);
int trim( char *);
main( int argc, char *arg[])
{
int s, i;
char buffer[1000];
int len_max = 1000;
struct sockaddr_in sin;
struct hostent *hp;
struct servent *sp;
fd_set fdset;
char host_name[80];
int port_no;
strcpy( host_name, "hasXXX.desy.de");
port_no = 7777;
if( argc > 1)
{
for( i=1; i < argc; i++)
{
if( arg[i][0] != '-')
{
continue;
}
switch( toupper( arg[i][1]))
{
case '?':
fprintf( stdout, "\n Usage:\n\n");
fprintf( stdout, " -? Help \n");
fprintf( stdout, " -hhostname \n");
fprintf( stdout, " -pport_no \n");
goto finish;
case 'H':
strcpy( host_name, arg[i] + 2);
break;
case 'P':
port_no = atoi( arg[i] + 2);
break;
}
}
}
fprintf( stdout,
" Connecting to %s port %d until 'bye'\n", host_name, port_no);
if( (hp = gethostbyname( host_name)) == 0)
{
fprintf(stderr, "host %s unknown\n", host_name);
goto finish;
}
if( (s = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0)
{
fprintf( stderr, " socket: %s \n", strerror( errno));
goto finish;
}
bcopy(hp->h_addr, &sin.sin_addr, hp->h_length);
sin.sin_family = AF_INET;
sin.sin_port = htons(port_no);
if ( connect(s, (struct sockaddr *) &sin, sizeof (sin)) < 0)
{
fprintf( stderr, " Connect: %s \n", strerror( errno));
goto finish;
}
FD_ZERO( &fdset );
FD_SET( s , &fdset );
while( 1)
{
i = read( fileno( stdin), buffer, len_max);
buffer[i] = 0;
trim( buffer);
if( !strcasecmp( buffer, "BYE"))
{
goto finish;
}
send(s, buffer, strlen(buffer), 0);
if( !strcmp( buffer, "bye"))
{
break;
}
if(select( 32, &fdset, 0 , 0 , 0))
{
i = recv(s , buffer, len_max , 0 );
buffer[i] = 0;
printf( "Reply: %s", buffer);
}
}
finish:
exit(0);
}
/*
remove leading and trailing white space
*/
int trim( char *buffer)
{
char cuffer[1000];
int i;
while( buffer[ strlen( (const char*) buffer) - 1] <= ' ')
{
buffer[ strlen(buffer) - 1] = 0;
}
strcpy( cuffer, buffer);
for( i = 0; i < strlen((const char*) buffer); i++)
{
if( buffer[i] > ' ')
{
break;
}
}
strcpy( cuffer, buffer + i);
strcpy( buffer, cuffer);
}