| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > соединение компов через модемы |
| Автор: KKNull 30.1.2006, 07:53 |
| Здравтвуйте уважаемые программисты. Можно попросить у вас помощи. Мне дано задание которое заключается в следующем: "Необходимо соединить два модема телефонных кабелем и написать программу-терминал для работы с аналоговым модемом (взаимодействие с модемом реализовать, напрямую, через COM порт). В программе реализовать передачу файла с одного компьютера на другой (в Windows), для контрольной суммы кадра использовать CRC 32, так же должно быть реализована функция чата. В программе предусмотреть возможность выбора COM порта. Модемы считать Hayes-совместимые. Пример программы реализующие данные функци – HyperTerminal" То есть по сути реализовать свой HyperTerminal. Эту программу необходимо реализовать в Visual Studio 6.0.(VC++6.0) Даже не знаю с чего начать. Опыта работы с VC++ у меня нет. Я просмотрел некоторые примеры работы с com портом- Если есть готовые программы с исходниками, прошу дать сцылку. |
| Автор: chaos 30.1.2006, 08:41 |
| поищи книгу Фролов А., Фролов Г. Программирование модемов (Библиотека системного программиста. Том 4) |
| Автор: takedo 30.1.2006, 12:03 |
| chaosKKNull Вдруг найдете ссылку, поделитесь адресочком? |
| Автор: chaos 30.1.2006, 13:56 |
| вот госопда пользуйтесь!!! http://xammep.nm.ru/doc/bsp/index.html Добавлено @ 13:58 да кстати KKNull глянь еще 16 том |
| Автор: KKNull 30.1.2006, 16:32 |
| Эти книги я уже смотрел. только функция открытия порта OpenComm в VC++ неработает компилятор говорит что эта ф-ция не определена. может какую библиотеку подключить нада? P.S. to Dreamer_0x01 опыта работы с портами у меня, к сожалению,нет |
| Автор: Dreamer_0x01 30.1.2006, 18:52 |
| Что тебе нужно? Открыть порт, настроить скорость и послать туда что-то, а потом дождаться получения? |
| Автор: KKNull 31.1.2006, 14:52 |
| Я тут набросал такой код, который посылает команды модему и принимает их: #include "stdafx.h" #include "afxwin.h" #include "windows.h" #include "stdio.h" #include "string.h" #include "conio.h" void main() { HANDLE hCOM = CreateFile( "COM2", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); DCB dcb;//Инициализация порта GetCommState(hCOM, &dcb);//Получаем настройки порта //Меняем часть настроек на свои dcb.BaudRate = 2400; //Скорости в бодах dcb.ByteSize = 8; //Байты информации dcb.Parity = NOPARITY; //Четность dcb.StopBits = ONESTOPBIT; //Кол-во стоп. битов SetCommState(hCOM, &dcb); //Устанавливаем новые настройки COMMTIMEOUTS CommTimeouts; GetCommTimeouts(hCOM,&CommTimeouts); CommTimeouts.ReadIntervalTimeout = 50; CommTimeouts.ReadTotalTimeoutMultiplier = 1; CommTimeouts.ReadTotalTimeoutConstant = 50; CommTimeouts.WriteTotalTimeoutMultiplier = 1; CommTimeouts.WriteTotalTimeoutConstant = 50; SetCommTimeouts(hCOM,&CommTimeouts); FlushFileBuffers(hCOM); //Очистка буфера if( hCOM!=INVALID_HANDLE_VALUE ) { printf( "Ok Open COM1\n" ); // char buffer[25]; // memset( buffer, 0, sizeof( buffer ) ); // strcpy( buffer, "ATE1" ); char rec[400]; char answer[512]; DWORD iBytesRead; OVERLAPPED ov; char buff[10]; while(1) { printf("To exit press - 1\n"); scanf("%s", &buff); if( buff[0] == (int)'1') break; int g = strlen(buff); buff[g++] = (char)13; buff[g] = '\0'; WriteFile( hCOM, (LPVOID)buff, strlen(buff)+1, &iBytesRead, NULL ); Sleep(100); ReadFile( hCOM, (LPVOID) rec, 512, &iBytesRead, NULL ); for( int i=0; i<(int)iBytesRead; i++) // Веделение ответа модема { if( (int)rec[i+1]==10 ) { int k = i; for( int j=0; j<((int)iBytesRead-k-2); j++ ) { answer[j] = rec[i+2]; i++; } answer[j] = '\0'; } // if( (int)rec[i+1]==10 ) } // for( int i=0; i<(int)iBytesRead; i++) printf(answer); } // wlile CloseHandle(hCOM); } // if( hCOM!=INVALID_HANDLE_VALUE ) else printf( "Error Open\n" ); } Меня интересует, что делать дальше? Как организовать передачу данных,(файл с CRC32) между компьютерами. |
| Автор: Dreamer_0x01 31.1.2006, 15:39 |
| Я не помню команды модемов,нужно смотреть, как с помощбю них передаются данные друг для друга, но это все должно быть в справочнике по командам модема. А дальше просто - открываешь файл, из него вытаскиваешь порцию символов, вызываешь нужную тебе команду мдема, которая эту последовательность символов отошлет...Ну и то же самое при приеме - опрашиваешь модем командой, выясняющей, есть лиданные для приема, если есть, генерируешь команду приема, выкачиваешь эти символы и сохраняешь в файл. |