На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> UDP server
    добрый день.
    не сталкивался с UDP и возник вопрос.
    в TCP после открытия порта - он занимается. а в UDP так же?

    пробывал поднять сервер по примеру как тут http://www.ithowto.ru/66-primer-raboty-s-k...udp-server.html
    на Indy - не случается событие IdUDPServer1UDPRead

    посылаю пакет широковещательно при помощи утилиты скаченной из интернета.

    не ясно что делаю не верно
    http://joxi.ru/v29J6NDcZnKQAG
      У вас порт привязан к IP адресу. Т.е он фильтрует по нему запросы.
      Что-бы принимать все пакеты надо ставить 0.0.0.0
      Во-вторых смотрите снифиром, что куда идёт. А то в последних виндах широковещательную рассылку сделали "привилегированной" операцией.
        спасибо за подсказку. попробую
        сторонее приложение которым я отправляю - точно вешает широковещательный пакет. на ардуинке принимаю его и в ответ отправляю

        хотел заменить чужое приложение своим на Delphi - самостоятельно общаться по UDP с своей ардуинкой.
        пока пытаюсь вещать широковещательно пакет чужим приложением и на этом же компьютере принимать его.

        интересно что в Delphi есть IdUdpServer и UDPServer два компонента.
        Сообщение отредактировано: Emmys -
          нет. видимо все равно что то не так делаю
          отправляю пакеты но они не доходят до приложения на дельфи
          http://joxi.ru/LmG31j4cwO0Vml
            нашел пример отправки.
            http://www.sources.ru/delphi/internet/send...dp_packet.shtml

            во первых Target.sin_addr.S_addr:=INADDR_BROADCAST;
            говорит что превышены пределы
            ну ок. заменил на это и все равно не отправляется UDP:

            ExpandedWrap disabled
              procedure sendUDP(sUDPPacket:string);
              var Init:TWSAData;
                  SockOpt:BOOL;
                  Sock:TSocket;
                  Target:TSockAddrIn;
                  Buffer: array[0..2047] of byte;
                  h:integer;
              begin
               WSAStartup($101,Init);
               Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
               SockOpt:=TRUE;
               SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST,PansiChar(@SockOpt),SizeOf(SockOpt)) ;
               Target.sin_port:=htons(51234);//номер порта
               Target.sin_addr.S_addr:=inet_addr(Pansichar(ChatForm.EditSendAddr.Text));;
               Target.sa_family:=AF_INET;
               
               
               
               
               
              h:=0;
              while h<=length(sUDPPacket)-1 do  begin
              Buffer[h]:=ord(sUDPPacket[h+1]);
              inc(h);
              end;
               
               
               SendTo(Sock,Buffer[0],length(sUDPPacket),0,Target,SizeOf(Target));
               WSACleanup;
              end;
              закрыто.

              скачал пример отсюда http://cybern.ru/udp-delphi.html
              изменил его как мне нужно. удобный Untit UDP
                и все таки почему компонент IdUDPServer1 не работает.
                я бы хотел в потоках работать и создать там IdUDPServer1 и получать с него данные.

                из того что я привел пример выше - в потоке не получится как я понял. т.к. при повторном обращении к UDP.pas старый сокет будет изменен. он там получается как бы общий.
                  непросредственно idUDPClient работает
                    Emmys
                    У меня был такой код:
                    Сервер:
                    ExpandedWrap disabled
                      procedure TForm1.FormCreate(Sender: TObject);
                       begin
                       UDPServer.Bindings.Add.Port:=666;
                       UDPServer.Active:=True;
                       end;
                       
                      procedure TForm1.UDPServerUDPRead(Sender: TObject; AData: TStream;
                        ABinding: TIdSocketHandle);
                       var
                       sl:TStringList;
                       Msg:string;
                       begin
                       sl:=TStringList.Create;
                       sl.LoadFromStream(AData);
                        Msg:=sl.Text;
                       Delete(Msg,Length(Msg)-1,2);
                         if Msg='ClientConnect' then ShowMessage('Fuck');
                       sl.Free;
                       end;


                    Клиент:
                    ExpandedWrap disabled
                      procedure TForm1.FormCreate(Sender: TObject);
                       begin
                       UDPClient.Send('255.255.255.255',666,'ClientConnect');
                       end;
                      когда я двойным кликом формирую то получаю вот это - отличается от вашего
                      ExpandedWrap disabled
                            procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
                              AData: TArray<System.Byte>; ABinding: TIdSocketHandle);


                      обратите внимание я еще косяк получаю
                      ExpandedWrap disabled
                        TArray<System.Byte>
                      - меняю в ручную его на
                      ExpandedWrap disabled
                         TBytes


                      может в этом причина?

                      Добавлено
                      мне очень нужно это реализовать. все встало из за этого сервера
                      Сообщение отредактировано: Emmys -
                        Emmys
                        Это было на 7 delphi, попробуйте не инди компонентами реализовать.
                          ^D^ima, у меня знаний не хватает как это сделать в потоке. мне нужно именно в потоке. по этому хотел через Create именно этим компонентом
                          я нашел рабочий пример на winsock но как его сделать в потоке - не имею понятия
                            Цитата Emmys @
                            ^D^ima, у меня знаний не хватает как это сделать в потоке.

                            Всё точно так же.
                            1. Создаём сокет.
                            2. Делаем Bind
                            3. Используем select, для получения статуса сокета и последующего его чтения.
                            4. При чтении данных заполняется структура sockaddr_in, откуда получим IP и порт отправителя.
                            Туда будем отправлять ответ.
                            Сообщение отредактировано: ЫукпШ -
                              ЫукпШ. я установил другую версию дельфи там все ок - работает
                              но я использую сторонние компоненты поэтому хотелось бы именно в этой версии все реализовать
                              выходом из положения вижу удаление индии и установка актуальной

                              не могли бы вы помочь как это сделать. ставлю на дельфи XE
                                http://joxi.ru/v29J6NDcZMEbAG
                                не могу победить. удаляю файл. нажимаю Install и получаю это
                                Сообщение отредактировано: Emmys -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.0933 ]   [ 15 queries used ]   [ Generated: 25.08.26, 14:54 GMT ]