CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3

Threaded View

  1. #1
    Join Date
    Jul 2005
    Posts
    1

    adhoc networking programming

    Hi I am actually programming an adhoc network in Visual C++ without success. please can anyone suggest what I can do or what I am doing wrong. this is my code.
    Code:
    #include <stdio.h>
    #include <winsock.h>
    #include <iostream.h>
    #define ATTACH 100
    #define DETACH 200
    #define ECHO 300
    #define TIME 400
    
    const UINT SRV_UDP_PORT = 5050;
    
    CSrvrView::CSrvrView()
    {
                          m_hListenerThread = NULL;
                          int status;
                          WSADATA wsaData;
                          
                          m_data = "Initiallizing Windows Sockets DLL..."
                          if((status = WSAStartup(MAKEWORD(2,2), &wsaData)) == 0)
                          {
                                     m_data += "Succeeded\n";
                                     m_bInitialized = TRUE;
                                     }
                          else
                          {
                              m_bInitialized = FALSE;
                              }
                          m_data += "Creating socket...";               
    //create socket
                          m_sock = socket(AF_INET, SOCK_DGRAM, 0);
                          
                          if (m_sock == INVALID_SOCKET)
                          {
                                     m_data += "Failed\n";
                                     }
                                     
    //Bind socket to address
                         m_data =+ "Succeeded\nBinding socket..."            
    // set up address structure
                        SOCKADDR_IN sa;
                        sa.sin_family = AF_INET;
                        sa.sin_addr.s_addr = htonl(INADDR_ANY);
                        sa.sin_port = htons(SRV_UDP_PORT);
                        
                        if(bind(m_sock,(PSOCKADDR)&sa, sizeof(sa)) == SOCKET_ERROR)
                        {
                                                       m_data += "Failed\n";
                                                       closesocket(m_sock);
                                                       }
                       m_data += "Succeeded\nCreating listener thread...";
                       unsigned long idThread;
                       m_hListenerThread = CreateThread(NULL,0,
                       (LPTHREAD_START_ROUTINE)Listener,
                       (void *)this, 0, &idThread);
                       
                       if(m_hListenerThread)
                       m_data += "Succeeded\nListening...\n";
                       else
                       m_data += "Failed\n";
                       }
    //cleanup
    
    CSrvrView::~CSrvrView()
    {
                           if(m_bInitialized)
                           WSACleanup();
                           closesocket(m_sock);
                           if(m_hListenerThread)
                           ::TerminateThread(m_hListenerThread, 0);
                           
    // define threads that recienves and process messages
    
    long WINAPI Listener(CSrvrView* pView)
    {
         SOCKADDR_IN saClnt;
         char msg[MSGSIZE];
         int saClntLen, nchar, msglen;
         
         while(1)
         {
                 saClntLen = sizeof(saClnt);
                 nchar = recvfrom(pView->m_sock, msg, MSGSIZE, 0
                 (PSOCKADDR)&saClnt, &saClntLen);
                 
                 if(nchar < 0)
                 {
                          pView->m_data += "Error in recvfrom\n";
                          pView->InvalidateRect(NULL);
                          }
                else
                {
                    msglen = nchar;
                    short *p_code = (short*)msg;
                    short code = ntohs(*p_code);
                    
                    switch(code)
                    {
                                case ATTACH:
                                     wsprintf(msg, "Client from %s attached\n",
                                     inet_ntoa(saClnt.sin_addr));
                                     msglen = strlen(msg);
                                     pView->m_data += msg;
                                     pView->InvalidateRect(NULL);
                                     break;
                                     
                                case DETACH:
                                     wsprintf(msg, "Client from %s detached\n",
                                     inet_ntoa(saClnt.sin_addr));
                                     msglen = strlen(msg);
                                     pView->m_data += msg;
                                     pView->InvalidateRect(NULL);
                                     break;
                                     
                                case TIME:
                                     time_t tnow;
                                     time(&tnow);
                                     sprintf(msg, "Time now: %s\n", ctime(&tnow));
                                     msglen = strlen(msg);
                                     break;
                                     
                                case ECHO:
                                     saClntLen = sizeof(saClnt);
                                     msglen = recvfrom(pView->m_sock, msg, MSGSIZE,
                                     0, (PSOCKADDR)&saClnt, &saClntLen);
                                     break;
                                     
                                     default:
                                             wsprintf(msg,
                                             "Don't understand message: %d\n",
                                             code);
                                             msglen = strlen(msg);
                                             
                                             }
                                             }
    
    //send result to client
    
    sendto(pView->m_sock, msg, msglen, 0, (PSOCKADDR)&saClnt, saClntLen);
    }
    return(0);
    }
    it is not even working.
    Last edited by Andreas Masur; July 19th, 2005 at 12:31 PM. Reason: Added code tags...

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured