title: Communication between two windows created using TCP Sockets (WIN32 API)
body: <p>I want to Create two windows using WINAPI and then I want to communicate between them using TCP scokets. 
  so far i have successfully created two windows and have successfully opened the sockets as well. but how two windows will communicate using this socket? here is the code i have written so far:</p>
  
  <p>another problem is that the code sends data only once from server to client.Also other windows messages are not processed unless data is sent once from server to client :(
  someone help me please?<code>enter code here</code><strong><em>SERVER WINDOW:</em></strong></p>
  
  <pre><code>// Program Name: server_window
  // ===============================
  // Author Name: Ayesha Hassan
  // ===============================
  // The Program creates a Listening Socket and waits for the client.
  // As soon as a Client is connected to this Server's Listening Socket, a Window is launched.      
  // When the user Clicks on this window using Mouse, a Message is sent to the Client over the Connected Socket. 
  
  #include &lt;windows.h&gt;
  #include &lt;iostream.h&gt;
  #include "stdafx.h"
  #include &lt;winsock2.h&gt;
  #include &lt;stdio.h&gt;
  #include &lt;tchar.h&gt;
  #include "resource.h"
  #pragma comment(lib,"ws2_32.lib")
  
  SOCKET AH_GlbSocket;
  
  const char AH_GlbClassName[] = "myWindClass";   ///Window Class Name
  HWND AH_Glb_hwnd;   //Header to Window
  
  LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, 
              WPARAM wParam, LPARAM lParam)
  {
  char message[]="Mouse Clicked On SERVER Window";
  HDC hdc;
  
  //Gets Handle for the Window 
  hdc=GetDC(hwnd);
  
  char buffer[1000];
  memset(buffer,0,999);
  
     switch(msg)
        {
  
        case WM_LBUTTONDOWN:
        //Sends Text to be displayed oon Client Window
           send(AH_GlbSocket, message, strlen(message), 0);
           break;
  
        case WM_CREATE:
            {
               WSADATA WsaDat;
               if(WSAStartup(MAKEWORD(2,2), &amp;WsaDat)!=0)
                  {
                     //printf("WSA Initialization failed!\r\n");
                     WSACleanup();
                     system("PAUSE");
                     return 0;
                  }
  
                  AH_GlbSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
                  if(AH_GlbSocket == INVALID_SOCKET)
                     {
                        //printf("AH_GlbSocket creation failed.\r\n");
                        WSACleanup();
                        system("PAUSE");
                        return 0;
                     }
                  //else
                     //printf("Socket created.\n");
  
                  SOCKADDR_IN serverInf;
                  serverInf.sin_family = AF_INET;
                  serverInf.sin_addr.s_addr = INADDR_ANY;
                  serverInf.sin_port = htons(8888);
  
                  if(bind(AH_GlbSocket,(SOCKADDR*)(&amp;serverInf), sizeof(serverInf)) == SOCKET_ERROR)
                     {
                        //printf("Unable to bind AH_GlbSocket!\r\n");
                        WSACleanup();
                        system("PAUSE");
                        return 0;
                     }
  
                  listen(AH_GlbSocket, 1);
                  SOCKET TempSock = SOCKET_ERROR;
  
                  while(TempSock == SOCKET_ERROR)
                  {
                     //printf("Waiting for incoming connections...\n\n");
                    TempSock = accept(AH_GlbSocket, NULL, NULL);
                  }
                  AH_GlbSocket = TempSock;
  
  
           }
           break;
        case WM_CLOSE:
           DestroyWindow(hwnd);
           break;
  
        case WM_DESTROY:
           PostQuitMessage(0);
           break;
  
        default:
           return DefWindowProc(hwnd, msg, wParam, lParam);
        }
      return 0;
  }
  
  int WINAPI WinMain(  HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, 
    int nShowCmd )
  {
  
  
     WNDCLASSEX wc;
     MSG Msg;
  
     //Step 1: Registering the Window Class
     wc.cbSize        = sizeof(WNDCLASSEX);
     wc.style         = 0;
     wc.lpfnWndProc   = WndProc;
     wc.cbClsExtra    = 0;
     wc.cbWndExtra    = 0;
     wc.hInstance     = NULL;
     wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
     wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
     wc.lpszMenuName  = NULL;
     wc.lpszClassName = AH_GlbClassName;
     wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);  
     //wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MYMENU);
     //wc.hIcon  = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
     //wc.hIconSm  = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 26, 26, 0);
  
     if(!RegisterClassEx(&amp;wc))
     {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
                    MB_ICONEXCLAMATION | MB_OK);
        return 0;
     }
  
     // Step 2: Creating Window1
     AH_Glb_hwnd = CreateWindowEx( WS_EX_CLIENTEDGE,
                                   AH_GlbClassName,
                                   "I am SERVER Window",
                                   WS_OVERLAPPEDWINDOW,
                                  10,30, 540, 220,
                                   NULL, NULL, NULL, NULL);
     if(AH_Glb_hwnd == NULL)
     {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
                   MB_ICONEXCLAMATION | MB_OK);
        return 0;
     }
  
     ShowWindow(AH_Glb_hwnd,SW_SHOWDEFAULT);
     UpdateWindow(AH_Glb_hwnd);
  
     // Step 3: The Message Loop
     while(GetMessage(&amp;Msg, NULL, 0, 0) &gt; 0)
     {
        TranslateMessage(&amp;Msg);
        DispatchMessage(&amp;Msg);
     }
     return Msg.wParam; 
  
  
  }
  
  
  ***CLIENT WINDOW:***
  #include &lt;windows.h&gt;
  #include "stdafx.h"
  //#include &lt;iostream.h&gt;
  #include &lt;winsock2.h&gt;
  #include &lt;stdio.h&gt;
  #include "resource.h"
  #pragma comment(lib,"ws2_32.lib")
  
  SOCKET AH_Glb_Socket;
  
  const char AH_Glb_ClassName[] = "myWindClass";
  HWND AH_Glb_hwnd;
  
  
  // Step 4: the Window Procedure
  LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  {
  
  
      switch(msg)
      {
  
          case WM_CLOSE:
              DestroyWindow(hwnd);
          break;
          case WM_DESTROY:
              PostQuitMessage(0);
          break;
          default:
              return DefWindowProc(hwnd, msg, wParam, lParam);
  
      }
      return 0;
  }
  
  
  
  int WINAPI WinMain(  HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
  {
      // Initialise Winsock
      WSADATA WsaDat;  
  
      if(WSAStartup(MAKEWORD(2,2),&amp;WsaDat)!=0)
      {
          printf("Winsock error - Winsock initialization failed");
          WSACleanup();
          system("PAUSE");
          return 0;
      }
      char* buff="CLIENT says: I am Going to connect to the server now\n\n";
      printf(buff,sizeof(buff));
      // Create our socket
      SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
      if(Socket==INVALID_SOCKET)
      {
          printf("Winsock error - Socket creation Failed!\r\n");
          WSACleanup();
          system("PAUSE");
          return 0;
      }
  
      // Resolve IP address for hostname
      struct hostent *host;
      if((host=gethostbyname("localhost"))==NULL)
      {
          printf("Failed to resolve hostname.\r\n");
          WSACleanup();
          system("PAUSE");
          return 0;
      }
  
      // Setup our socket address structure
      SOCKADDR_IN SockAddr;
      SockAddr.sin_port=htons(8888);
      SockAddr.sin_family=AF_INET;
      SockAddr.sin_addr.s_addr=*((unsigned long*)host-&gt;h_addr);
  
      // Attempt to connect to server
      if(connect(Socket,(SOCKADDR*)(&amp;SockAddr),sizeof(SockAddr))!=0)
      {
          printf("Failed to establish connection with server\r\n");
          WSACleanup();
          //system("PAUSE");
          //return 0;
      }
  
      WNDCLASSEX wc;
  
      MSG Msg;
  
      //Step 1: Registering the Window Class
      wc.cbSize        = sizeof(WNDCLASSEX);
      wc.style         = 0;
      wc.lpfnWndProc   = WndProc;
      wc.cbClsExtra    = 0;
      wc.cbWndExtra    = 0;
      wc.hInstance     = NULL;
      wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
      wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
      wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
      wc.lpszMenuName  = NULL;
      wc.lpszClassName = AH_Glb_ClassName;
      wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
  
      //wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MYMENU);
      //wc.hIcon  = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
      //wc.hIconSm  = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 26, 26, 0);
  
      if(!RegisterClassEx(&amp;wc))
      {
          MessageBox(NULL, "Window Registration Failed!", "Error!",
              MB_ICONEXCLAMATION | MB_OK);
          return 0;
      }
  
      // Step 2: Creating Window1
      AH_Glb_hwnd = CreateWindowEx(
          WS_EX_CLIENTEDGE,
          AH_Glb_ClassName,
          "I am CLIENT Window",
          WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, CW_USEDEFAULT, 440, 120,
          NULL, NULL, NULL, NULL);
  
      if(AH_Glb_hwnd == NULL)
      {
          MessageBox(NULL, "Window Creation Failed!", "Error!",
              MB_ICONEXCLAMATION | MB_OK);
          return 0;
      }
  
      ShowWindow(AH_Glb_hwnd,SW_SHOWDEFAULT);
      UpdateWindow(AH_Glb_hwnd);
  
      char buffer[1000];
      memset(buffer,0,999);
  
          recv(Socket,buffer,1000,0);
          printf(buffer,sizeof(buffer));
          TextOut(GetDC(AH_Glb_hwnd),5,5,buffer,sizeof(buffer));
  
  
      // Step 3: The Message Loop
      while(GetMessage(&amp;Msg, NULL, 0, 0) &gt; 0)
      {   
          TranslateMessage(&amp;Msg);
          DispatchMessage(&amp;Msg);
      }
      return Msg.wParam;
  
  
  }
  </code></pre>