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

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

Можно ли как-нить узнать свободен ли данный порт? [D5, WinME]


SergP ©   (2003-09-16 11:01:00) 

Сабж.
Смысл в том что в проге используется TServerSocket (для внутренних целей).
Типа:
TWebbrowser <--> TserverSocket <--> Обработчик запросов и ответов <--> TClientsocket <--> Инет

Он должен быть настроен на какой-нить порт.
Но если я запускаю несколько копий проги то нужно чтобы порты были разные. как проверить или используется данный порт?


Digitman   (2003-09-19 08:11:00) [1]


> SergP


глаза раскрой !)


> Digitman © (17.09.03 10:53) [7]


Polevi   (2003-09-18 22:19:00) [2]

ох...


delpher_gray   (2003-09-18 20:49:00) [3]

try
ServerSocket1.Open;
except
ShowMessage("Порт занят !!");
// Меняй порт, пробуй заного...
end;


Digitman   (2003-09-17 10:53:00) [4]

MyServerSocket.Socket.LocalPort


SergP   (2003-09-17 07:09:00) [5]


> Polevi © (16.09.03 13:58) [5]
> The Windows Sockets bind function associates a local address
> with a socket.
>
> For TCP/IP, if the port is specified as zero, the service
> provider will assign a unique port to the application with
> a value between 1024 and 5000. The application can use getsockname
> after bind to learn the address and the port that has been
> assigned to it


Хм... Что-то я такого не наблюдаю. Или что-то не так делаю. Устанавливаю порт 0. потом активирую сокет. А как узнать на какой порт его теперь система "повешала"? Свойство port у serversocket не изменяется после активирования...


Polevi   (2003-09-16 13:58:00) [6]

The Windows Sockets bind function associates a local address with a socket.

For TCP/IP, if the port is specified as zero, the service provider will assign a unique port to the application with a value between 1024 and 5000. The application can use getsockname after bind to learn the address and the port that has been assigned to it


SergP   (2003-09-16 13:48:00) [7]


> Dimka Maslov © (16.09.03 13:11) [3]
> 1. Создаёшь сервер и вешаешь его на нужный тебе порт
> 2. Создаёшь клиента и пытаешся соединиться с сервером 127.0.0.1:port
> 3. Если сервер установил соединение - порт свободен, если
> сервер ничего не установил порт занят


Хорошо. А эксперименты с "занятым портом" не повлияют на выполнение копии программы которая уже использует именно этот порт?

И нет ли более простого способа определения? А то использование дополнительных сокетов как-то нехорошо выглядит, типа усложненно...


Dimka Maslov   (2003-09-16 13:11:00) [8]

1. Создаёшь сервер и вешаешь его на нужный тебе порт
2. Создаёшь клиента и пытаешся соединиться с сервером 127.0.0.1:port
3. Если сервер установил соединение - порт свободен, если сервер ничего не установил порт занят


SergP   (2003-09-16 13:03:00) [9]


> Карелин Артем © (16.09.03 11:03) [1]
> Клиентский сокет в блокирующем режиме делает коннект. Хост
> 127.0.0.1 порт известный. Дальше смотри на реакцию сокета.


Как я понял нужно создать еще один ClientSocket, с помощью которого по очереди проверять некоторый диапазон портов ? И если сокет не сможет сконектиться то значит порт свободен?


Карелин Артем   (2003-09-16 11:03:00) [10]

Клиентский сокет в блокирующем режиме делает коннект. Хост 127.0.0.1 порт известный. Дальше смотри на реакцию сокета.


Наверх

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