|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Indy udp в консольном приложении
Всем привет! Нашел в инете код но он почему то не работает(при коннекте на порт 27010 ничего не происходит), подскажите пожалуйста в чем дело.
Код:
program Project1; {$APPTYPE CONSOLE} uses SysUtils, Classes, IdSocketHandle, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer; type TUDPServer = class private IdUDPServer: TIdUDPServer; procedure IdUDPServer1UDPRead(ASender: TObject;AData: TStream; ABinding: TIdSocketHandle); public constructor Create; reintroduce; destructor Destroy; override; end; constructor TUDPServer.Create; begin idUDPServer:=tIdUDPServer.create(nil); idUDPServer.DefaultPort:=27010; idUDPServer.BufferSize:=8192; idUDPServer.BroadcastEnabled:=false; idUDPServer.OnUDPRead:=IdUDPServer1UDPRead; IdUDPServer.Active:=true; end; destructor TUDPServer.Destroy; begin IdUDPServer.Active:=false; IdUDPServer.free; inherited destroy; end; procedure TUDPServer.IdUDPServer1UDPRead(ASender: TObject;AData: TStream; ABinding: TIdSocketHandle); begin Writeln('KyKy'); readln; end; begin with TUDPServer.Create do try writeln( 'Running' ); readln finally free; end; end. |
#2
|
|||
|
|||
А как ты подсоединяешься? Это же UDP...
|
#3
|
|||
|
|||
Я вот уже потом подумал что может возникнуть такой вопрос. Да, не точно выразил. Не подключаюсь а отправляю запрос. Программа отправляющая запрос моя "самописная" и у меня есть аналог этого сервера(тоже мой "самописный" но только не консольный. И они работают нормально.) Вот собрался его переделать под консольное приложение.
Ребят, проблема решена. Нужно было перед IdUDPServer.Active:=true; вписать IdUDPServer.ThreadedEvent:=True; и еще кое что "подшаманить" Ниже выкладываю рабочий код, может кому пригодится. Код:
program Project1; {$APPTYPE CONSOLE} uses SysUtils, Classes, IdSocketHandle, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer; type TUDPServer = class private IdUDPServer: TIdUDPServer; procedure IdUDPServer1UDPRead(ASender: TObject;AData: TStream; ABinding: TIdSocketHandle); public constructor Create; reintroduce; destructor Destroy; override; end; var ExitFlag: boolean = false; constructor TUDPServer.Create; begin idUDPServer:=tIdUDPServer.create(nil); idUDPServer.DefaultPort:=27010; idUDPServer.BufferSize:=8192; idUDPServer.BroadcastEnabled:=false; idUDPServer.OnUDPRead:=IdUDPServer1UDPRead; IdUDPServer.ThreadedEvent:=True; IdUDPServer.Active:=true; end; destructor TUDPServer.Destroy; begin IdUDPServer.Active:=false; IdUDPServer.free; inherited destroy; end; procedure TUDPServer.IdUDPServer1UDPRead(ASender: TObject;AData: TStream; ABinding: TIdSocketHandle); begin Writeln('KyKy'); end; begin with TUDPServer.Create do try writeln( 'Running' ); repeat Sleep(1000); until ExitFlag; finally free; end; end. Последний раз редактировалось M.A.D.M.A.N., 08.08.2014 в 19:22. |