Вниз
Скачать: CL | DM;

работа с IndyUDPServer в потоке Thread   Найти похожие ветки 

 
XfroSt   (2006-12-21 16:31) [0]

Ситуация такая... я работаю с IndyUDPServer в потоке...
метод execute описан так

procedure TGameThread.Execute;
begin
 inherited;
 UdpS := TidUDPServer.Create(nil);
 ScanGame;
 Sleep(2000); // ожидаем 2 секунды (сделать настройку) для ответа UDP
 UdpS.Destroy; // уничтожаем сервер
 TGameThread(ThreadList[ThreadList.Count - 1]).Terminate; // убираем один поток из списка
 ThreadList.Delete(ThreadList.Count - 1);
end;

процедура ScanGame выглядит так

begin
             // Если UDp
               UdpS.Active := false;
               Udps.OnUDPRead := UdpsUDPRead;
               UdpS.DefaultPort :=Cport ;
               UdpS.BroadcastEnabled := true;
               Udps.ThreadedEvent := true;
               UdpS.Active := true;
               UdpS.Broadcast(pak,Sport);
               

             end;

при это как видно поток живет 2 секунды, сервер переходит в ожидание и отсылает запрос. Если приходит ответ в течении 2 секунд, то он обрабатывается если нет , то сервер и поток уничтожаются.

Данный поток из основной программы я вызываю вот так
ThreadList.Add(TGameThread.Create(false));

Проблема при вызове двух потоков одновременно (они отсылают разные запросы), когда второй поток делает вот это
UdpS.Broadcast(pak,Sport)
, а прервый еще не уничтожился, возникает ошибка Counot bind the socket.

Вопрос!
Как можно организовать работу нескольких потоков IndyUDPServer что бы не возникало такой ошибки ? как я понял просто второй занимает тот же сокет, как ему дать другой. Что бы можно было многопоточно отсылать сообщения и ждать их ответов ?


 
Сергей М. ©   (2006-12-21 16:35) [1]


> как ему дать другой


UDPServer.Binding.Port := даю_другой

А вообще - каша какая-то из обрывочных сведений о многом понемногу.


 
XfroSt   (2006-12-21 16:52) [2]


> UDPServer.Binding.Port := даю_другойА вообще - каша какая-
> то из обрывочных сведений о многом понемногу.

а это назначается порт отправки или порт приема ?

какие сведения еще сообщить ? вроде я описал все пошагово...


 
Сергей М. ©   (2006-12-22 08:20) [3]


> а это назначается порт отправки или порт приема ?


Порт приема.


> поток живет 2 секунды, сервер переходит в ожидание и отсылает
> запрос


Судя по твоему коду дело обстоит так

1. Сервер активируется.
2. Выполняет бродкаст на указанный параметром порт.
3. Поток спит 2 секунды богатырским сном, ничего не делая и ни на что не реагируя при этом.
4. Поток просыпается, уничтожает сервер и тут же завершает свое выполнение.


 
Сергей М. ©   (2006-12-22 08:43) [4]

И зачем тебе куча доп.потоков - это тоже не понятно.

Достаточно одного. Да и он не нужен - при ThreadedEvent = true всё это с успехом делается в осн.потоке.


 
XfroSt   (2006-12-22 20:47) [5]

Сергей М Спасибо!
Я решил по другому... -- UdpS.Binding -- все работает ....



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.98 c
6-1166707891
XfroSt
2006-12-21 16:31
2007.07.29
работа с IndyUDPServer в потоке Thread


15-1183429016
Slider007
2007-07-03 06:16
2007.07.29
С днем рождения ! 3 июля 2007 вторник


11-1166279345
NeeDiGeo
2006-12-16 17:29
2007.07.29
Добавление формы в уже существующий проект KOL_MCK


2-1183578350
Познающий
2007-07-04 23:45
2007.07.29
CreateProcessEx


15-1183112964
jack128
2007-06-29 14:29
2007.07.29
Насколько вордовский документ, сохранённый в HTML является XHTML?




   Наверх