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

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

16.10.2012, 21:13. Показов 24525. Ответов 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,469
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,469
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,469
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,469
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,469
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
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru