Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

UDP_SocketClient Class Reference

#include <UDP_SocketClient.hpp>

Inheritance diagram for UDP_SocketClient::

UDP_Socket List of all members.

Public Methods

__inline UDP_SocketClient (char *srvNameAddress, short TFTP_Port)
virtual __inline ~UDP_SocketClient ()
virtual __inline bool send (void *msg, size_t msgLen)

Static Private Methods

void * ListenThread (void *data)

Private Attributes

sockaddr_in dest

Constructor & Destructor Documentation

UDP_SocketClient::UDP_SocketClient char *    srvNameAddress,
short    TFTP_Port
 

Definition at line 6 of file UDP_SocketClient.cpp.

00007  : UDP_Socket()
00008 {
00009    memset( &dest,  0, sizeof( struct sockaddr_in ) );
00010 
00011    getHostData( srvNameAddress );
00012 
00013    dest.sin_family = PF_INET;
00014    dest.sin_addr   = *(in_addr*)( hostdata->h_addr_list[0] );
00015    dest.sin_port   = htons( TFTP_Port );
00016 
00017    // Server part:
00018 
00019    memset( &server, 0, sizeof( struct sockaddr_in ) );
00020     
00021    server.sin_family      = PF_INET;
00022    server.sin_addr.s_addr = htonl( INADDR_ANY );
00023    server.sin_port        = htons( TFTP_Port );
00024 
00025    mySocket = socket( PF_INET, SOCK_DGRAM, 0 );
00026       
00027    if ( mySocket < 0 )
00028    {
00029       printf( "Error: listen socket creation failed\n" );
00030    }
00031 
00032    // Start thread
00033    PrintInfo();    
00034    int ThreadID;
00035    pthread_t thread;
00036    ThreadID = pthread_create( &thread, 0,
00037                               UDP_SocketClient::ListenThread,
00038                               (void*)this
00039                             );
00040    if ( ThreadID )
00041    {
00042       printf("Error creating listen thread\n");
00043       exit( 3 );
00044    }
00045 }

__inline UDP_SocketClient::~UDP_SocketClient   [virtual]
 

Definition at line 108 of file UDP_SocketClient.cpp.

00108 { }


Member Function Documentation

void * UDP_SocketClient::ListenThread void *    data [static, private]
 

Definition at line 47 of file UDP_SocketClient.cpp.

00048 {
00049    UDP_SocketClient* me = (UDP_SocketClient*)data;
00050 
00051    int serverAddrLength = sizeof( me->server );
00052 
00053    while( 1 )  // Infinite loop
00054    {
00055       // Clear buffer
00056       memset( me->buffer, 0, UDP_BUFFER_SIZE );
00057 
00058       int result = recvfrom( me->mySocket,
00059                              me->buffer,   
00060                              UDP_BUFFER_SIZE, 0,
00061                              (struct sockaddr *) &me->server,
00062                              (socklen_t       *) &serverAddrLength
00063                            );
00064 
00065       size_t pduLength = result;
00066       if ( pduLength > 60 ) pduLength = 60;
00067 
00068       // We retrieve the client name from recvfrom()
00069     
00070       if ( result >= 0 ) 
00071       {
00072           printf( "Received %d bytes\n", result);
00073           printf( "Message received from host %s port %i\n",
00074                    inet_ntoa( me->server.sin_addr ),
00075                    ntohs(     me->server.sin_port )
00076                 );
00077 
00078       option.showChar( "Received:", (char*)me->buffer, pduLength );
00079 
00080          fflush( stdout );
00081 
00082          // Call TFTP_PacketParser
00083          UDP_CALLBACK();
00084 
00085          fflush( 0 );
00086  
00087       } else if ( result < -1 ) {
00088          printf( "[%d]", result );
00089          printf( "Error while receiving message: recvfrom() < 0 " );
00090          fflush( stdout );
00091       }
00092 
00093       if ( me->dest.sin_addr.s_addr != me->server.sin_addr.s_addr ) 
00094       {
00095           
00096         printf( "Error, received message from else where!\n" );
00097         exit( 4 );
00098       }
00099    }
00100 }

__inline bool UDP_SocketClient::send void *    msg,
size_t    msgLength
[virtual]
 

Reimplemented from UDP_Socket.

Definition at line 103 of file UDP_SocketClient.cpp.

00104 {
00105    return UDP_Socket::send( msg, msgLength, &dest );
00106 }


Member Data Documentation

struct sockaddr_in UDP_SocketClient::dest [private]
 

Definition at line 17 of file UDP_SocketClient.hpp.

Referenced by ListenThread().


The documentation for this class was generated from the following files:
Generated on Sun Oct 14 18:50:21 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001