When we create an application that open port using winsock, we need to anticipate that user may execute our application twice in order no port conflict error. So we need to check whether that port is already opened at OnCreate event of the form. Below is the function to check that :
uses Winsock; function PortIsOpen(dwPort : Word; ipAddressStr:AnsiString) : boolean; var client : sockaddr_in; sock : Integer; ret : Integer; wsdata : WSAData; begin Result:=False; ret := WSAStartup($0002, wsdata); if ret<>0 then exit; try client.sin_family := AF_INET; client.sin_port := htons(dwPort); client.sin_addr.s_addr := inet_addr(PAnsiChar(ipAddressStr)); sock :=socket(AF_INET, SOCK_STREAM, 0); Result:=connect(sock,client,SizeOf(client))=0; finally WSACleanup; end; end;
To use that function, write down this code in OnCreate form event
procedure TForm1.FormCreate(Sender: TObject); begin if PortIsOpen(1521,'127.0.0.1') then showmessage('Port is already opened'); end;
No comments:
Post a Comment