Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

определить "свободные" UDP&TCP порты   Найти похожие ветки 

 
MetalFan ©   (2004-07-29 17:36) [0]

subj собственно.
заранее спасибо за помощь!


 
Rouse_ ©   (2004-07-29 20:44) [1]

какова цель?
bind и accept сами дадут тебе свободный порт


 
Rouse_ ©   (2004-07-29 21:12) [2]

т.е. не bind а connect :)


 
MetalFan ©   (2004-07-30 11:18) [3]

я использую Indy TCP & Indy UDP серверы! мне нужно запустить их на одинаковых свободных портах в заданном диапазоне!
сорри, если неясно выразился!


 
panov ©   (2004-07-30 11:55) [4]

ну так запускай сервер и проверяй на ошибку.


 
MetalFan ©   (2004-07-30 11:57) [5]

ну пока так и делаю...
может есть более красивое решение?


 
Anatoly Podgoretsky ©   (2004-07-30 11:57) [6]

А что значит свободные, ну запустил ты сервер на 21 порту, а потом фтп сервер, это свободный порт или нет?


 
panov ©   (2004-07-30 12:03) [7]

Есть такая программа - netstat, можно ей воспользоваться или написать API-аналог.


 
MetalFan ©   (2004-07-30 12:18) [8]


> panov ©   (30.07.04 12:03) [7]

спасибо! забыл как это прога называется! чес слово)

> Anatoly Podgoretsky ©   (30.07.04 11:57) [6]
> А что значит свободные, ну запустил ты сервер на

простите, может я счас и глупость скажу...
но TCP и UDP протоколы по моему ниже по уровню, чем FTP...
===
в общем у меня задача такая:
есть программа-сервер, есть клиентская часть.
при старте сервера активируются на одном из свободных(одинаковых по номеру) портов Indy UDP и TCP сервера...
при запуске клиента сначала производится broadcast по UDP в некотором диапазоне портов, и затем, если найден сервер, осуществляется соединение по TCP...
соотв. если приходит ответ от UDP сервера с определенного порта, то считается, что там же находиться TCP сервер и к нему пытается присоединиться TCP клиент...
===
вот для чего на сервере мне нужно "занять" одинаковые порты по UDP и TCP.

сейчас на серверном приложении делаю поиск свободных примерно портов так:
 
...
FIdServer := TIdUDPServer.create(nil);
...
function GetPort: Integer;
 var
   lFound: Boolean;
   lTCPServ: TIdTCPServer;
 begin
   Result := C_BROADCASTBSP;
   lTCPServ := TIdTCPServer.Create(nil);
   try
     repeat
       if FIdServer.Active then
         FIdServer.Active := false;
       if lTCPServ.Active then
         lTCPServ.Active := false;
       lFound := True;
       try
         FIdServer.DefaultPort := Result;
         FIdServer.Active := True;
         lTCPServ.DefaultPort := result;
         lTCPServ.Active := true;
       except
           Inc(Result);
           lFound := False;
       end;
       if Result = C_BROADCASTESP then
         Break;
     until lFound;
     lTCPServ.Active := false;
   finally
     lTCPServ.Free;
   end;
end;

можно как нибудь по-красивее / по быстрее это реализовать?


 
False_Delirium ©   (2004-07-30 12:59) [9]

     try
        FIdServer.DefaultPort := Result;
        FIdServer.Active := True;
        lTCPServ.DefaultPort := result;
        lTCPServ.Active := true;
      except
          Inc(Result);
          lFound := False;
      end;


Не то что в этой программе, так вообще нельзя делать, никогда.

У тебя при любом исключении переходит в except блок.

Для чего тебе целый lTCPServ, не проще создать для проверки сервер на API, bind пока жет тебе результат.


  Result := C_BROADCASTBSP;
  lTCPServ := TIdTCPServer.Create(nil);
  try
    repeat
      try
        ...  
      except
          Inc(Result);
          lFound := False;
      end;
      if Result = C_BROADCASTESP then
        Break;
 
    until lFound;


На лицо вероятность бесконечного цикла.:)


 
MetalFan ©   (2004-07-30 14:07) [10]

а можно мааленький примерчик?!



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

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
1-1096311431
Kolan
2004-09-27 22:57
2004.10.10
сделать калонку stringgrid не доступной


1-1095586738
appendix
2004-09-19 13:38
2004.10.10
выравнивание в текстовом файле


1-1095660056
П7
2004-09-20 10:00
2004.10.10
TTreeNode.Data - как правильно использовать?


14-1094813897
STM
2004-09-10 14:58
2004.10.10
Как написать mailer


4-1093879716
Hkr
2004-08-30 19:28
2004.10.10
Хук на показывание окна