Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Вниз

работа с 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 вся ветка

Форум: "Сети";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.068 c
15-1183140482
qoooo
2007-06-29 22:08
2007.07.29
Книга - "Delphi 5, Руководство разработчика"


2-1183361301
Dyakon_Frost
2007-07-02 11:28
2007.07.29
Как присвоить один код для многих компонентов одного типа


15-1183045399
oldman
2007-06-28 19:43
2007.07.29
Всех сумасшедших - с праздником!


15-1182915959
Pohil
2007-06-27 07:45
2007.07.29
Есть здесь абаперы?


2-1183355919
Alex8
2007-07-02 09:58
2007.07.29
Изменение редактора полей в RunTime





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский