
14.02.2012, 20:10
|
Прохожий
|
|
Регистрация: 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;
Скорее всего косяк где-то в коде. Очень нужна помощь! 
|