Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

определить "свободные" UDP&TCP порты [D6, Win95/98, Win2k, WinXP]


MetalFan ©   (2004-07-29 17:36:00) 

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


MetalFan   (2004-07-30 14:07:00) [1]

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


False_Delirium   (2004-07-30 12:59:00) [2]

      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 12:18:00) [3]


> 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;

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


panov   (2004-07-30 12:03:00) [4]

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


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

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


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

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


panov   (2004-07-30 11:55:00) [7]

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


MetalFan   (2004-07-30 11:18:00) [8]

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


Rouse_   (2004-07-29 21:12:00) [9]

т.е. не bind а connect :)


Rouse_   (2004-07-29 20:44:00) [10]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо