一個簡單的例子, (Delphi 7)
function ScanTCPPort(ipstr : string; Port : DWORD) : Boolean;
var
ClientSocket : TIdTCPClient;
begin
try
ClientSocket := TIdTCPClient.Create(self);
try
ClientSocket.Host := ipstr; //ipstr := '127.0.0.1';
ClientSocket.Port := Port;
ClientSocket.Connect;
ClientSocket.Disconnect;
//the port is open, and add your code as below.
//...
Result := True;
except
; //do nothing; --- means the port is not open.
Result := False;
end;
finally
ClientSocket.Free;
end;
end;
function ScanTCPPort(ipstr : string; Port: DWORD): Boolean;
var
option: DWORD;
TcpSock: TSocket;
InAddr: TSockAddrIn;
IP : DWORD;
begin
result := False;
//convert IP string to ulong
IP := ntohl(inet_addr(PChar(ipstr)));
if IP = INADDR_NONE then //invalid IP address!
exit;
// Create/open a socket (stream, not datagram)
TcpSock := socket(AF_INET, SOCK_STREAM, 0);
if TcpSock = INVALID_SOCKET then //socket error
exit;
try
// Set socket options
option := 0;
setsockopt(TcpSock, SOL_SOCKET, SO_KEEPALIVE, @option, sizeof(option));
option := 1;
setsockopt(TcpSock, SOL_SOCKET, SO_DONTLINGER, @option, sizeof(option));
//if winsock 1.1, including the next sentence, otherwise, skip it.
setsockopt(TcpSock, IPPROTO_TCP, TCP_NODELAY, @option, sizeof(option));
//Initialize address structure
ZeroMemory(@InAddr, sizeof(InAddr));
InAddr.sin_family := AF_INET;
InAddr.sin_addr.S_addr := ntohl(IP);
InAddr.sin_port := htons(Port);
//Try to connect
Result := connect(TcpSock, InAddr, sizeof(InAddr)) = 0;
finally
//Close the socket
closesocket(TcpSock);
end;
end;