Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/124: Рейтинг темы: голосов - 124, средняя оценка - 4.86
Деструктор ума
 Аватар для log
22 / 22 / 0
Регистрация: 07.03.2009
Сообщений: 326

Прием пакетов по UDP

16.10.2012, 21:13. Показов 24637. Ответов 30

Студворк — интернет-сервис помощи студентам
Приветствую. С сетевыми протоколами раньше дела не имел.
Начал сразу к практике приступать. Хотел посмотреть, как вообще реализовать прием данных по протоколу ЮДП.
Набрал литературный код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//---------------------------------------------------------------------------
 
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <winsock2.h>
#include <vcl.h>
#include <windows.h>
 
#define MAX_PACKET_SIZE    0x10000
#define SIO_RCVALL         0x98000001
 
char Buffer[MAX_PACKET_SIZE]; // 64 Kb
//---------------------------------------------------------------------------
typedef struct IPHeader {
  UCHAR   iph_verlen;   
  UCHAR   iph_tos;      
  USHORT  iph_length;  
  USHORT  iph_id;       
  USHORT  iph_offset;   
  UCHAR   iph_ttl;     
  UCHAR   iph_protocol; 
  USHORT  iph_xsum;    
  ULONG   iph_src;      
  ULONG   iph_dest;    
} IPHeader;
char src[10];
char dest[10];
char ds[15];
unsigned short lowbyte;
unsigned short hibyte;
//---------------------------------------------------------------------------
int main(void)
{
 
  WSADATA     wsadata;   
  SOCKET      s;       
  char        name[128]; 
  HOSTENT*    phe;      
  SOCKADDR_IN sa;       
  IN_ADDR sa1;        
  unsigned long        flag = 1;  
 
  
  WSAStartup(MAKEWORD(2,2), &wsadata);
  s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
  gethostname(name, sizeof(name));
  phe = gethostbyname( name );
  ZeroMemory( &sa, sizeof(sa) );
  sa.sin_family = AF_INET;
  sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
  bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
 
 
  ioctlsocket(s, SIO_RCVALL, &flag);
 
 
  while( !_kbhit() )
  {
    unsigned int count;
    count = recv( s, Buffer, sizeof(Buffer), 0 );
    
    if( count >= sizeof(IPHeader) )
    {
      IPHeader* hdr = (IPHeader *)Buffer;
      
 
    strcpy_s(src,"Ïàêåò: ");
    //CharToOem(src,dest);
    //system (dest);
    printf(dest);
    // Ïðåîáðàçóåì â ïîíÿòíûé âèä àäðåñ îòïðàâèòåëÿ.
    printf("From ");
    sa1.s_addr = hdr->iph_src;
    printf(inet_ntoa(sa1));
 
    
    printf(" To ");
    sa1.s_addr = hdr->iph_dest;
    printf(inet_ntoa(sa1));
 
   
    printf(" Prot: ");
    if(hdr->iph_protocol == IPPROTO_TCP) printf("TCP ");
    if(hdr->iph_protocol == IPPROTO_UDP) printf("UDP ");
 
    
    printf("Size: ");
    lowbyte = hdr->iph_length>>8;
    hibyte = hdr->iph_length<<8;
    hibyte = hibyte + lowbyte;
   
    printf("%u", hibyte);
 
   
    printf(" TTL:%s",itoa(hdr->iph_ttl,ds,10));
    printf("\n");
 
    }
  }
 
  closesocket( s );
  WSACleanup();
}
ругается на то, что не может открыть "stdafx.h".
ну и на _kbhit и на strcpy_s.

в чем ошибка, подскажите пожалуйста.

Добавлено через 45 минут
и где находится компонент TIdThreadComponent
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2012, 21:13
Ответы с готовыми решениями:

Прием UDP пакетов асинхронном режиме
Добрый день. мне необходимо принимать все UDP пакеты приходящие на порт 888. Поделитесь, плиз, примером асинхронного приема UDP...

Прием и отправка пакетов
Всем привет! Нужно отправить определенной структуры пакет серверу на порт 28000. Так выглядит структура пакета: ...

Потери UDP пакетов
Всем здравствуйте...Столкнулся со следующей проблемой. Попытался передать довольно большой файл по сети UDP пакетами размером в пару сотен...

30
Деструктор ума
 Аватар для log
22 / 22 / 0
Регистрация: 07.03.2009
Сообщений: 326
29.10.2012, 20:35  [ТС]
Студворк — интернет-сервис помощи студентам
ну это понятно
ругается на строчку
C++
1
ss.write(Buffer + sizeof(IPHeader), count - sizeof(IPHeader));
[C++ Error] Unit1.cpp(58): E2335 Overloaded 'count' ambiguous in this context
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,474
30.10.2012, 09:10
я добавил в код из вашего поста куски:
C++
1
2
#include <sstream>
#include <iostream>
в начало после включения vcl.h и
C++
1
2
3
4
5
6
7
8
        std::stringstream ss;
        ss.write(Buffer + sizeof(IPHeader), count - sizeof(IPHeader));
        while (!ss.eof())
        {
            double x;
            ss >> x;
            std::cout << x << std::endl;
        }
в конец после вычисления жизни пакета и у меня все собралось без ошибок. я не виноват что вы у себя что-то еще наломали
1
Деструктор ума
 Аватар для log
22 / 22 / 0
Регистрация: 07.03.2009
Сообщений: 326
30.10.2012, 19:49  [ТС]
потестирую завтра
только, как я правильно понял нужно писать
C++
1
2
3
4
5
6
7
8
std::stringstream ss;
        ss.write(Buffer + sizeof(IPHeader), count - sizeof(IPHeader));
        while (ss.peek() != EOF)
        {
            double x;
            ss >> x;
            std::cout << x << std::endl;
        }
взамен строчке без определения EOF
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,474
30.10.2012, 20:03
да...
0
Деструктор ума
 Аватар для log
22 / 22 / 0
Регистрация: 07.03.2009
Сообщений: 326
31.10.2012, 20:12  [ТС]
vxg, вообщем выводит нули...
можно кстати попробовать по другому.
всю информацию, которая приходит всохранять в текстовый файл.
или попробовать переделать программу под вывод на форму.
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,474
01.11.2012, 08:21
попробуйте поставить точку останова на строке с recv, запустите программу в режиме отладки, дождитесь прихода пакета, пройдите строку с recv и посмотрите что в буфере наведя на него мышь. может там хлам.

Добавлено через 29 секунд
а сколько нулей выводит то ? совпадает с количеством переданных данных или им нет числа?
0
Деструктор ума
 Аватар для log
22 / 22 / 0
Регистрация: 07.03.2009
Сообщений: 326
01.11.2012, 09:50  [ТС]
vxg, в recv ноль)
выводит один ноль) может это и не реально вывести информацию, которая хранится в пакете?
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,474
01.11.2012, 13:00
что значит в recv ноль? что именно находится в Buffer если посмотреть в режиме отладки?
0
Деструктор ума
 Аватар для log
22 / 22 / 0
Регистрация: 07.03.2009
Сообщений: 326
01.11.2012, 14:22  [ТС]
recv = :72DD1858
Buffer = : /0/0/0/0/0/0/0/0/0... бесконечное количество нулей
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,474
01.11.2012, 16:47
Цитата Сообщение от log Посмотреть сообщение
бесконечное количество нулей
бесконечное оно не может быть. оно ровно такое сколько вернул в качестве результата recv. 72DD1858 - это то что он вернул или адрес функции? попробуйте моим кодом
0
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 12
25.04.2013, 19:13
выдает ошибку , что за ошибка?
C++
1
WSADATA wsa_data;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2013, 19:13

Прием по UDP и передача на RS232
Имеется программа, которая передает через UDP протокол некую информацию. Необходимо перенаправить эту информацию на COM порт, где ее будет...

Отправка UDP пакетов с задержкой в 5 мкс
Здравствуйте.Как раз не давно с толкнулся с проблемой реализации отправки UDP пакетов с задержкой в 5 мкс.Хотел использовать функцию...

Заголовки пакетов ( ip / tcp / udp / icmp )
Есть сниффер , приходит пакет , в файл сохраняю информацию о заголовке . Проблема в том что поля IPHeader в файл записывается (вроде)...

Вывод udp пакетов. Непонятен код. Небольшая часть кода
Нашел на просторах интернета вот такой код... вернее здесь я убрал лишние хэйдеры и некоторые не используемые переменные, скомпилировал -...

Прием фрагментированных кадров UDP
Добрый день. Возникла проблема с приемом данных UDP. Есть устройство, которое посылает по UDP данные. Пакеты с IP фрагментацией,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru