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

Вниз

определить "свободные" 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.063 c
4-1093591313
Falcon
2004-08-27 11:21
2004.10.10
Проблемы с окнами


3-1095238349
Донской
2004-09-15 12:52
2004.10.10
BOF или EOF имеет значение true в adodataset.


1-1096333480
evgniyf
2004-09-28 05:04
2004.10.10
delphi8


3-1095155532
_alex_
2004-09-14 13:52
2004.10.10
FireBird


4-1094794580
needle
2004-09-10 09:36
2004.10.10
Как узнать принадлежит-ли компьютер к какому-либо домену?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский