Many times we need to know if a TCP port is open or not, here I leave a function to perform this task using winsock.
Code tested in Delphi 7, 2007 and 2010.
uses
Winsock;
function PortTCP_IsOpen(dwPort : Word; ipAddressStr:AnsiString) : boolean;
var
client : sockaddr_in;
sock : Integer;
ret : Integer;
wsdata : WSAData;
begin
Result:=False;
ret := WSAStartup($0002, wsdata); //initiates use of the Winsock DLL
if ret<>0 then exit;
try
client.sin_family := AF_INET; //Set the protocol to use , in this case (IPv4)
client.sin_port := htons(dwPort); //convert to TCP/IP network byte order (big-endian)
client.sin_addr.s_addr := inet_addr(PAnsiChar(ipAddressStr)); //convert to IN_ADDR structure
sock :=socket(AF_INET, SOCK_STREAM, 0); //creates a socket
Result:=connect(sock,client,SizeOf(client))=0; //establishes a connection to a specified socket
finally
WSACleanup;
end;
end;
see this sample of usage
begin if PortTCP_IsOpen(3306,'127.0.0.1') then DoMyStuff(); end;