C++Builder

Вопросы программирования => Windows API => Тема начата: Саша от 20 марта 2012, 11:46:40



Название: Проблема приема сообщений с помощью recvfrom
Отправлено: Саша от 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);
   }
 
 }
}

Я так считаю что не правильно использовать Таймер, нужно использовать чтото другое а вот что не пойму. Что посоветуете?


Название: Re: Проблема приема сообщений с помощью recvfrom
Отправлено: serg76 от 20 марта 2012, 17:11:17
обрабатывать лучше в потоке

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


Название: Re: Проблема приема сообщений с помощью recvfrom
Отправлено: Саша от 20 марта 2012, 21:56:46
Спасибо. Попробую. Если исправлю выложу :)