Форум: "Сети";
Текущий архив: 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.045 c