Changeset 63 for vtcross/branches

Show
Ignore:
Timestamp:
11/20/08 15:17:38 (16 years ago)
Author:
trnewman
Message:

Added better socket functionality.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vtcross/branches/trnewman/CR_shell/src/main_cognitive_radio.cpp

    r35 r63  
    11#include <iostream> 
     2#include <sys/types.h> 
     3#include <sys/wait.h> 
    24#include "tinyxml.h" 
    35#include "tinystr.h" 
     
    208210 
    209211 
    210 int StartShell() { 
    211    // Start socket server 
    212  
    213  
    214    try 
    215    { 
    216       //Create the socket 
    217       ServerSocket server ( SERVER_PORT ); 
    218       ServerSocket server_1 ( 30001 ); 
    219  
    220       cout << "Waiting for Cognitive Engine to connect: port " << SERVER_PORT << endl;; 
    221       while ( true ) 
    222       { 
    223          ServerSocket new_sock; 
    224          server.accept ( new_sock ); 
    225  
    226          try 
    227          { 
    228             while ( true ) { 
    229                string data; 
    230                new_sock >> data; 
    231                new_sock << data; 
    232             } 
    233          } 
    234          catch ( SocketException& ) {} 
    235  
    236       } 
    237    } 
    238    catch ( SocketException& e ) 
    239    { 
    240       cout << "Exception was caught:" << e.description() << "\nExiting.\n"; 
    241    }  
    242  
    243    return 0; 
     212void error(char *msg) 
     213{ 
     214    perror(msg); 
     215    exit(1); 
     216} 
     217 
     218void StartMessageParser( int socketfd) { 
     219        char buffer[256]; 
     220        int n; 
     221 
     222        while(1) { 
     223                // Clear incoming data buffer 
     224                bzero(buffer,256); 
     225                 
     226                // Wait for incoming message 
     227                n = recv(socketfd,buffer,255,0); 
     228                if (n < 0) error("ERROR reading from socket"); 
     229                if (n == 0) error("Client has closed the connection."); 
     230                 
     231                // Print message 
     232                printf("Here is the message: %s\n",buffer); 
     233 
     234                // Write message back to client 
     235                n = write(socketfd,"I got your message",18); 
     236                if (n < 0) error("ERROR writing to socket"); 
     237        } 
     238} 
     239 
     240int StartShell(int port) { 
     241        // Start socket server 
     242        int sockfd, newsockfd, clilen; 
     243        struct sockaddr_in serv_addr, cli_addr; 
     244 
     245        // Setup socket connection 
     246      
     247        sockfd = socket(AF_INET, SOCK_STREAM, 0); 
     248        if (sockfd < 0)  
     249                error("ERROR opening socket"); 
     250        bzero((char *) &serv_addr, sizeof(serv_addr)); 
     251        serv_addr.sin_family = AF_INET; 
     252        serv_addr.sin_addr.s_addr = INADDR_ANY; 
     253        serv_addr.sin_port = htons(port); 
     254        if (bind(sockfd, (struct sockaddr *) &serv_addr, 
     255                sizeof(serv_addr)) < 0)  
     256                error("ERROR on binding"); 
     257        listen(sockfd,5); 
     258        clilen = sizeof(cli_addr); 
     259        newsockfd = accept(sockfd,  
     260                (struct sockaddr *) &cli_addr,  
     261                (socklen_t*)&clilen); 
     262        if (newsockfd < 0)  
     263                error("ERROR on accept"); 
     264 
     265        // Begin parsing the messages 
     266        StartMessageParser(newsockfd); 
     267 
     268        return 0; 
    244269} 
    245270 
     
    275300        cout << "Configuration file parsing completed." << endl; 
    276301 
    277         StartShell(); 
     302        // Open cognitive engine port    
     303        StartShell(30000); 
     304 
     305        // Open policy engine port 
     306//      StartShell(30001); 
    278307 
    279308   return 1;