Не понимаю, почему иногда обыкновенные текстовые сообщения не отправляются получателю, пока сам получатель что-нибудь не отправит отправителю. Инициализацию делаю следующим образом:
Код:
1 2 3 4 5 6 | 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 ^));
|
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 ;
|
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | procedure SendToIP(fip: AnsiString ; fpack: string ; fmode: byte );
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_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 ;
|
Скорее всего косяк где-то в коде. Очень нужна помощь!
