|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.11.2009, 23:52 | #1 |
Новичок
Джуниор
Регистрация: 24.09.2009
Сообщений: 2
|
Работа с Mailslot'ами
Всем привет, в общем, у меня проблема с почтовыми ящиками. От клиента к серверу передается сообщение.
Код сервера: #include <windows.h> #include <string> #define IDM_CREATE 101 #define IDM_CLOSE 102 #define MAX_LOADSTRING 100 HINSTANCE hInst; TCHAR szTitle[MAX_LOADSTRING]; TCHAR szWindowClass[MAX_LOADSTRING]; BOOL fReturnCode; //Код, для возврата из функции DWORD cbMessages; //Размер сообщения в байтах DWORD cbMsgNumber; //Количество сообщений в канале HANDLE hMailslot; //Идентификатор канала MailSlot LPSTR lpszMailslotName = "\\\\.\\mailslot\\$Channel$"; //Имя создаваемого канала MailSlot char szBuf[512]; //Буфер для передачи данных DWORD cbRead; //Количество байт данных, принятых через канал HWND LsBx,But,But2; LRESULT CALLBACK WndProc(HWND,UINT,UINT,LONG); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { HWND hWnd; WNDCLASS WndClass; MSG Msg; char szClassName[] = "Server"; WndClass.style = CS_HREDRAW | CS_VREDRAW; WndClass.lpfnWndProc = WndProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = hInstance; WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL,IDC_ARROW); WndClass.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH); WndClass.lpszMenuName = NULL; WndClass.lpszClassName = szClassName; if(!RegisterClass(&WndClass)) { MessageBox(NULL,"Не могу создать класс","Ошибка!",MB_OK); } hWnd = CreateWindow(szClassName,"Сервер",W S_OVERLAPPEDWINDOW,200,100,400,300, NULL,NULL,hInstance,NULL); if(!hWnd) { MessageBox(NULL,"Не могу создать окно","Ошибка",MB_OK); } LsBx = CreateWindow("ListBox", NULL, WS_VISIBLE|WS_CHILD|WS_BORDER|LBS_S TANDARD|LBS_WANTKEYBOARDINPUT, 10, 50, 100, 100, hWnd, NULL, hInstance, NULL); But = CreateWindow("button", "Создать канал", WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE, 35, 230, 155, 30, hWnd, (HMENU)IDM_CREATE, hInstance, NULL); But2 = CreateWindow("button", "Закрыть канал", WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE, 190, 230, 155, 30, hWnd, (HMENU)IDM_CLOSE, hInstance, NULL); ShowWindow(hWnd,nShowCmd); UpdateWindow(hWnd); while(GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam) { HDC hDC; PAINTSTRUCT PaintStruct; RECT rect; SetRect(&rect, 10, 0, 200, 30); int wmID, wmEvent; switch(uMsg) { case WM_COMMAND: wmID=LOWORD(wParam); wmEvent=HIWORD(wParam); switch(wmID) { case IDM_CREATE: //MessageBox(hWnd,"In rect","",MB_OK); hMailslot = CreateMailslot(lpszMailslotName, NULL, MAILSLOT_WAIT_FOREVER, NULL); //MessageBox(hWnd,"Success","",MB_OK) ; SendMessage(LsBx,LB_ADDSTRING,0,(LP ARAM)"Канал создан!"); if(hMailslot == INVALID_HANDLE_VALUE) { MessageBox(hWnd, "Канал уже создан, либо невозможно совершить операцию!", "Внимание!", MB_OK); return 0; } if (hMailslot == INVALID_HANDLE_VALUE) return 0; else return 1; if(1) { fReturnCode = GetMailslotInfo(hMailslot, NULL, NULL,&cbMsgNumber, NULL); if(!fReturnCode) { MessageBox(hWnd,"Ошибка. Сообщений нет","Внимание!",MB_OK); break; } if(cbMsgNumber != 0) { if (ReadFile(hMailslot, szBuf, 512, &cbRead, NULL)) { SendMessage(LsBx, LB_ADDSTRING, (WPARAM)+1,(LPARAM)szBuf); UpdateWindow(LsBx); } else { MessageBox(hWnd, "Ошибка. Сообщений нет","Внимание!",MB_OK); break; } } } break; case IDM_CLOSE: CloseHandle(hMailslot); SendMessage(LsBx,LB_ADDSTRING,NULL, (LPARAM)(LPTSTR)"Работа завершена"); break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } case WM_PAINT: hDC = BeginPaint(hWnd,&PaintStruct); GetClientRect(hWnd,&rect); EndPaint(hWnd,&PaintStruct); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd,uMsg,wParam,lPar am); }
<a href="http://vkontakte.ru/id4944002">Я в контакте</a>
|
10.11.2009, 23:52 | #2 |
Новичок
Джуниор
Регистрация: 24.09.2009
Сообщений: 2
|
Код клиента
#include <windows.h> #include <string> #include <stdio.h> #define IDM_OPEN 101 #define IDM_CLOSE 102 LRESULT CALLBACK WndProc(HWND,UINT,UINT,LONG); HWND edit,But1,But2,But3,LsBx; HANDLE hMailslot; // Идентификатор канала Mailslot char szMailslotName[256]; // Буфер для имени канала Mailslot DWORD cbWritten; // Количество байт, переданных через канал char szBuf[512]; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { HWND hWnd; WNDCLASS WndClass; MSG Msg; char szClassName[] = "Client"; WndClass.style = CS_HREDRAW | CS_VREDRAW; WndClass.lpfnWndProc = WndProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = hInstance; WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL,IDC_ARROW); WndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); WndClass.lpszMenuName = NULL; WndClass.lpszClassName = szClassName; if(!RegisterClass(&WndClass)) { MessageBox(NULL,"Не могу создать класс","Ошибка!",MB_OK); } hWnd = CreateWindow(szClassName,"Клиент",W S_OVERLAPPEDWINDOW,200,100,400,300, NULL,NULL,hInstance,NULL); if(!hWnd) { MessageBox(NULL,"Не могу создать окно","Ошибка",MB_OK); } edit = CreateWindow("Edit", NULL, WS_VISIBLE|WS_CHILD|WS_BORDER|ES_AU TOHSCROLL|ES_AUTOVSCROLL|ES_MULTILI NE, 10, 20, 150, 20, hWnd, NULL, hInstance, NULL); But1 = CreateWindow(TEXT("button"), TEXT("Открыть файл"), WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE, 35, 230, 155, 30, hWnd, (HMENU)IDM_OPEN, hInstance, NULL); But2 = CreateWindow(TEXT("button"), TEXT("Закрыть канал"), WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE, 190, 230, 155, 30, hWnd, (HMENU)IDM_CLOSE, hInstance, NULL); LsBx = CreateWindow("ListBox", NULL, WS_VISIBLE|WS_CHILD|WS_BORDER|LBS_S TANDARD|LBS_WANTKEYBOARDINPUT, 10, 50, 100, 100, hWnd, NULL, hInstance, NULL); ShowWindow(hWnd,nShowCmd); UpdateWindow(hWnd); while(GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam) { //char text[100]; HDC hDC; PAINTSTRUCT PaintStruct; RECT rect,r; int xPos,yPos; SetRect(&rect, 10, 0, 200, 30); SetRect(&r,250,50,300,100); int wmID, wmEvent; switch(uMsg) { case WM_MOUSEMOVE: xPos = LOWORD(lParam); yPos = HIWORD(lParam); InvalidateRect(hWnd, &rect, TRUE); break; break; case WM_COMMAND: wmID=LOWORD(wParam); wmEvent=HIWORD(wParam); switch (wmID) { case IDM_OPEN: { strcpy(szMailslotName, "\\\\.\\mailslot\\$Channel$"); hMailslot = CreateFile(szMailslotName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); SendMessage(LsBx,LB_ADDSTRING,0,(LP ARAM)"Файл открыт!"); if(hMailslot == INVALID_HANDLE_VALUE) { MessageBox(NULL,"Ошибка","Канал не создан",MB_OK); return 0; } break; } case IDM_CLOSE: CloseHandle(hMailslot); SendMessage(LsBx,LB_ADDSTRING,0,(LP ARAM)"Канал закрыт!"); return 0; break; } break; case WM_LBUTTONDOWN: xPos = LOWORD(lParam); yPos = HIWORD(lParam); if ((xPos > 250 && xPos < 300 ) && ( yPos > 50 && yPos < 100)) { if(hMailslot == INVALID_HANDLE_VALUE) return 0; else return 1; if(1) { SendMessage(edit, EM_GETLINE, (WPARAM)0, (LPARAM)(LPCSTR)szBuf); if (!WriteFile(hMailslot, szBuf, strlen(szBuf) + 1,&cbWritten, NULL)) break; if(!strcmp(szBuf, "exit")) break; } } case WM_PAINT: hDC = BeginPaint(hWnd,&PaintStruct); GetClientRect(hWnd,&rect); TextOut(hDC,10,5,"Введите текст",13); // sprintf(text, "xPos = %d, yPos = %d\0", xPos, yPos); // DrawText(hDC, text, -1, &rect, DT_LEFT); FillRect(hDC,&r,(HBRUSH)CreateSolid Brush(RGB(255,0,0))); EndPaint(hWnd,&PaintStruct); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd,uMsg,wParam,lPar am); } Пожалуйста, подскажите, где ошибка.. PS Подозреваю, что где-то в сервере
<a href="http://vkontakte.ru/id4944002">Я в контакте</a>
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. | 0101 | Помощь студентам | 3 | 17.12.2009 23:57 |
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме | NewDelphi | Фриланс | 2 | 08.10.2009 11:00 |