Показать сообщение отдельно
  #1  
Старый 14.02.2012, 20:10
cyberexpert cyberexpert вне форума
Прохожий
 
Регистрация: 10.07.2009
Сообщения: 20
Репутация: 10
Стрелка Проблема с UDP в Delphi

Не понимаю, почему иногда обыкновенные текстовые сообщения не отправляются получателю, пока сам получатель что-нибудь не отправит отправителю. Инициализацию делаю следующим образом:

Код:
 WSAStartup($0101, wData);
  Sock := socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
  ServerAddr.sin_family := AF_INET;
  ServerAddr.sin_port := htons(1730);
  bind(Sock, ServerAddr, SizeOf(ServerAddr));
  CreateThread(nil, 0, @RecvProc, nil, 0, LongWord(nil^));

Код:
procedure RecvProc(Param: Pointer); stdcall;
// поток, служащий для принятия входящих пакетов
var
  Count: LongInt;
  from: TSockAddrIn;
  FromLen: LongInt;
  Packet: TPacket;
  i, j: LongInt;
begin
  while True do
  begin
    FromLen := SizeOf(from);
    Count := recvfrom(Sock, Packet, SizeOf(Packet), 0, from, FromLen);
    if Count > 0 then
    begin
      ExecutePacket(Packet, string(inet_ntoa(from.sin_addr)));
    end;
  end;
end;

Код:
procedure SendToIP(fip: AnsiString; fpack: string; fmode: byte);
// сборка и отправка пакета на заданный IP-адрес
  procedure Send(var Packet: TPacket; var Addr: TSockAddrIn);
  begin
    sendto(Sock, Packet, SizeOf(Packet), 0, Addr, SizeOf(Addr));
  end;

var
  PacketToSend: TPacket;
  i: integer;
begin
  //ServerAddr.sin_port := htons(666);
  ServerAddr.sin_addr.S_addr := inet_addr(PAnsiChar(fip));
  PacketToSend.mode := fmode;
  PacketToSend.pack := #0;
  for i := 0 to length(fpack) - 1 do
    PacketToSend.pack[i] := Char(fpack[i + 1]);

  Send(PacketToSend, ServerAddr);
end;

Скорее всего косяк где-то в коде. Очень нужна помощь!
Ответить с цитированием