Jump to content

Узнать при старте сервера что сервер с данным портом уже запущен


Serg

Recommended Posts

Добрый день!

 

Как узнать при старте сервера что сервер с данным портом уже запущен и закрыть его без сообщения об ошибке.

 

Спасибо

Link to comment
Share on other sites

По сути Вы собираетесь определить название приложения и порт сторонней программы и не важно что это за приложение, оно работает автономно в отельной памяти.

Вам нужно или писать сканер порта или придумать способ взаимодействия Вашего приложения с внешним миром. Например через файл. Запустилось приложение сделали туда запись, выгрузили приложение - удалили запись. Плюс в том, что не надо взаимодействовать с системой, а минус в том, что при аварийном завершении или при принудительной снятии задачи, файлик останется не почищенный. Можно по другому - создать сокет и открыть служебный порт для соединения с другими программами и по паролю принимать соединение от другого экземпляра своей программы. По отрытому порту и возможности с ним соединиться сможете определить запущена прога или нет, а можно еще и реализовать обмен информацией, к примеру запросить номер порта, отправить номер порта... Выбирайте какой путь Вам ближе. 

Link to comment
Share on other sites

Нет вы  не правильно меня поняли или я недостаточно точно написал.

 

1.Стартует сервер UNIGUI - и вываливается ошибка что порт на котором он настроен занят - вопрос где именно перехватит эту ошибку.

2.Наверняка uNIGUI делает где то метку что работает программа именно с таким названием.

Link to comment
Share on other sites

Я недостаточно прямо указал свой вопрос)

 

1.Загружается приложение UniGui.

2.Порт который указан для работы приложения оказывается занят.

3.Возникает ошибка 'Порт занят'

4. Где перехватить ошибку что бы правильно закрыть приложение без сообщения об ошибке

и сделать некие действия.

 

Link to comment
Share on other sites

  function PortTCPIsOpen(dwPort : Word; ipAddressStr:string) : boolean;
    var
      client : sockaddr_in;//sockaddr_in is used by Windows Sockets to specify a local or remote endpoint address
      sock   : Integer;
    begin
        client.sin_family      := AF_INET;
        client.sin_port        := htons(dwPort);//htons converts a u_short from host to TCP/IP network byte order.
        client.sin_addr.s_addr := inet_addr(PChar(ipAddressStr)); //the inet_addr function converts a string containing an IPv4 dotted-decimal address into a proper address for the IN_ADDR structure.
        sock  :=socket(AF_INET, SOCK_STREAM, 0);//The socket function creates a socket 
        Result:=connect(sock,client,SizeOf(client))=0;//establishes a connection to a specified socket.
    end;

UniserverModule.BeforeInit

  • Upvote 1
Link to comment
Share on other sites

UniGUI сам знает что не может стартовать на занятом порту. Зачем еще проверять. Нужно только это отловить. В этом и заключается вопрос.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...