Сдраствуйте. Я пишу программу на 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);
}
}
}
Я так считаю что не правильно использовать Таймер, нужно использовать чтото другое а вот что не пойму. Что посоветуете?