Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прослушивание порта в C++, Как читать информацию с опр. порта? 
:(
    Опции темы
Timkin
Дата 4.10.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.8.2005
Где: Кёльн, Германия

Репутация: нет
Всего: нет



Привет всем!
Такая проблема, что нужно написать приложение, которое будет прослушивать какой-либо порт (не помню, какой именно был по проекту) и работать с полученной информацией. Как это сделать?
И второй вопрос - обратная задача: как посылать инфо на какой-нибудь порт опр. сервера в локальной сети? Это для проверки работы первой проги.
Заранее благодарен за любую помощь!!!
PM MAIL WWW ICQ   Вверх
mo3art
Дата 5.10.2005, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 29.9.2005
Где: пло не та 3 емля

Репутация: нет
Всего: нет



Если я правильно понял вопрос, то открываешь порт через CreateFile потом пишешь/читаешь обычными ReadFile/WriteFile.
Скопипастил тебе пример из хелпа по СДК. smile

Код

#include <windows.h>
#include <assert.h>

HANDLE hCom;
OVERLAPPED o;
BOOL fSuccess;
DWORD dwEvtMask;

hCom = CreateFile( "COM1",
    GENERIC_READ | GENERIC_WRITE,
    0,    // exclusive access 
    NULL, // default security attributes 
    OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,
    NULL
    );

if (hCom == INVALID_HANDLE_VALUE) 
{
    // Handle the error. 
    return;
}

// Set the event mask. 

fSuccess = SetCommMask(hCom, EV_CTS | EV_DSR);

if (!fSuccess) 
{
    // Handle the error. 
    return;
}

// Create an event object for use in WaitCommEvent. 

o.hEvent = CreateEvent(
    NULL,   // default security attributes 
    FALSE,  // auto reset event 
    FALSE,  // not signaled 
    NULL    // no name 
    );

assert(o.hEvent);

if (WaitCommEvent(hCom, &dwEvtMask, &o)) 
{
    if (dwEvtMask & EV_DSR) 
    {
         // To do.
    }

    if (dwEvtMask & EV_CTS) 
    {
         // To do. 
    }
}




а вообще-то поиск рулит... ;)
PM MAIL   Вверх
Timkin
Дата 5.10.2005, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.8.2005
Где: Кёльн, Германия

Репутация: нет
Всего: нет



А ты пробовал запускать? Мой Dev-Cpp ступорится на 9-й строке с ошибкой что-то вроде 'ISO C++ Forbids...'. А вообще слушать не ком-порт надо, а просто по номеру, например 1070 или что-то типа того... Или нет разницы?
Заранее сорри за потенциальный тупизм, в С++ равно как и в сетевом программировании я не силён. smile
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 5.10.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Юзай сокеты smile
socket
Цитата(Timkin @ 4.10.2005, 19:55)
прослушивать какой-либо порт

не понятно тебе слушать все или только то , что для тебя,
я недавно для своих нужд малень кий снифер написал (по исходникам из нета) могу скинуть smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
mo3art
Дата 5.10.2005, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 29.9.2005
Где: пло не та 3 емля

Репутация: нет
Всего: нет



Цитата(Timkin @ 5.10.2005, 11:07)
А ты пробовал запускать? Мой Dev-Cpp ступорится на 9-й строке с ошибкой что-то вроде 'ISO C++ Forbids...'. А вообще слушать не ком-порт надо, а просто по номеру, например 1070 или что-то типа того... Или нет разницы?

- нет, не пробовал... я же написал, что скопипастил из доков к СДК от Майкрософта. smile Ну а если тебе нужны не порты, а порты smile тогда сгрузи пример отсюда: Codeguru.com может он тебе чем поможет... smile
PM MAIL   Вверх
Timkin
Дата 5.10.2005, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.8.2005
Где: Кёльн, Германия

Репутация: нет
Всего: нет



Цитата(Romikgy @ 5.10.2005, 11:26)
не понятно тебе слушать все или только то , что для тебя

Ну желательно всё слушать, т.к. из этого можно будет сцедить нужное инфо. Там просто используется какой-то определённый порт, и по нему, вроде, кроме нужной инфы ничего не передается.smile
Я с сокетами уже пропарился весь вчерашний день, и мне это всё таким сложным показалось, что я решил поискать более лёгкого пути. Если есть работающий пример, то буду очень благодарен.smile
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 5.10.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Есть , это снифер , он слушает все порты твоей машины
Будут вопросы задавай


Присоединённый файл ( Кол-во скачиваний: 87 )
Присоединённый файл  main.cpp 3,60 Kb


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Timkin
Дата 5.10.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.8.2005
Где: Кёльн, Германия

Репутация: нет
Всего: нет



Чё-та вызов всех функций из winsock2.h заканчивается Linker Error'ом, например, " [Linker error] undefined reference to `WSAStartup@8' ". Может у меня компилятор какой-то глюченный?? Подскажите тогда плз, какой юзать...
Update: Всё, нарыл в инете объяснение этому феномену. Оказывается, там какая-то беда с Си и Си++ библиотеками, и для того, чтобы работало, нужен какой-то новый драйвер качать. Скачаю лучше Visual C++, надеюсь, что проблема решится. Спасибо за примеры!

Это сообщение отредактировал(а) Timkin - 5.10.2005, 23:14
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 6.10.2005, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Подключи библиотеку libws2_32.a, она лежит в либах, а вкл. ее в параметрах проекта.
Добавлено @ 09:17
Это проект (то бишь файл) я делал именно в Dev-C++ !!!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Timkin
Дата 6.10.2005, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.8.2005
Где: Кёльн, Германия

Репутация: нет
Всего: нет



Цитата(Romikgy @ 6.10.2005, 09:15)
Подключи библиотеку libws2_32.a, она лежит в либах, а вкл. ее в параметрах проекта.

Сорри, я тупой... Библиотеку нашёл, а как её подключить??? Это в настройках Dev-Cpp, в коде проги или ещё как?
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 6.10.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



(Dev-C++) -> Проект - Настройки проекта - Параметры - Добавить библиотеку


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Timkin
Дата 6.10.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.8.2005
Где: Кёльн, Германия

Репутация: нет
Всего: нет



А, спасибо, заработало. smile
Буду разбираться.
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 6.10.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Дафай smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Timkin
Дата 6.10.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.8.2005
Где: Кёльн, Германия

Репутация: нет
Всего: нет



Страшно как-то... smile
Romikgy, спасибо за пример, но этот снифер решает немного иную задачу...
Моя задача в том, что через порт №3500 передаётся поток байтов в виде "$$+ID...+TL...", где $$ - начало передаваемой строки, а плюсами разделяются всякие параметры. Нужно написать прогу, которая будет читать поток с этого порта и извлекать необходимые параметры. Для тестирования нужно также написать прогу, которая в этот порт инфу будет передавать...
Я думаю, что чтение и извлечение нужной инфы из содержимого TCP пакетов - задача не из лёгких. smile
Может быть есть какой-то более простой способ??? Хелп ми плиз, кто-нибудь!!

Это сообщение отредактировал(а) Timkin - 6.10.2005, 15:10
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 6.10.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Снифер он и есть снифер ,он только слушает , что творится в сети smile
А тебе нужен сервер и клиент, также делается на сокетах,
вот ссылка на прокси сервер с описанием (вроде понятно описано smile) прокси это 2 в 1 и клиент и сервер:
http://www.uinc.ru/articles/24/
плюс почитай как сделать прогу не тормозящей т.к. recv ожидает окончания операции
http://www.uinc.ru/articles/23/

ЗЫ а легче всего поставить или дельфи или борланд си ++ и там есть компонента TCPServer & TCPClient все в куче smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1187 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.