C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема приема сообщений с помощью recvfrom  (Прочитано 7085 раз)
Саша
новенький
*

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 2


« : 20 марта 2012, 11:46:40 »

Сдраствуйте. Я пишу программу на API - функциях, для приема и отправки сообщений с помощью функции sendto и recvform, по протоколу UDP. На моей машине отправка и прием пакетов происходит отлично, но стоит мне отправить пакеты с другой машины(подключеной по локальной сети) то ничего не происходит т.е пакет отправляется а принимать с другой машины не могу. Для приема пакетов я использую Timer в С++ Buildere 6. Вот код приема:
Код
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
char Buffer[100];
 char * tBuf;
 char * pBuf;
 char Answer[100];
 int iKount, i, ClearCount, err;
 AnsiString S, St, Se, S2, S3, str, Estr;
 ClearCount = 0;
 int FalseCount=0, SuccCount=0;
 
 sockaddr_in server_addr;
 int server_addr_size=sizeof(server_addr);
 
 if (!first)
 {
 
   DWORD time_out = 100;
   setsockopt (s, SOL_SOCKET, SO_RCVTIMEO, (const char*)&time_out, sizeof (DWORD));
   err = recvfrom(s,&Answer[0],Nsize + 1,0,(sockaddr *) &server_addr, &server_addr_size);
 
   if (err < 0)
   {
     Memo1->Lines->Add("Прием не успешен! " + IntToStr(GetLastError()));
     FalseCount++;
   }
   else
   {
     SuccCount++;
     ClearCount=0;
     str="";
     while (err)
     {
       str += Answer[ClearCount];
       err--;
       ClearCount++;
     }
     pBuf = new char[str.Length() + 1 ];
     strcpy( pBuf, str.c_str() );
     for(i = 0; i < strlen(pBuf); i++)
     {
       St = S.sprintf("%0.2X",pBuf[i]);
       S2 += St + " ";
     }
 
    Memo1->Lines->Add("");
     Memo1->Lines->Add("Принято байт: " + IntToStr(ClearCount));
    //Memo1->Lines->Add(atoi(str));
     Memo1->Lines->Add(str);
     Memo1->Lines->Add(S2);
   }
 
 }
}

Я так считаю что не правильно использовать Таймер, нужно использовать чтото другое а вот что не пойму. Что посоветуете?
« Последнее редактирование: 20 марта 2012, 12:24:54 от volvo877 » Записан
serg76
Участник
**

Сказали спасибо: +38/-2
Offline Offline

Сообщений: 575


« Ответ #1 : 20 марта 2012, 17:11:17 »

обрабатывать лучше в потоке

работает localhost, для сети надо сокет выделить
  server_addr.sin_port=htons(1263);
Записан
Саша
новенький
*

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 2


« Ответ #2 : 20 марта 2012, 21:56:46 »

Спасибо. Попробую. Если исправлю выложу Улыбка
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в: