Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

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

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

Код:
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);
// сборка и отправка пакета на заданный 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;

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


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025