netstat 호출을 포착하는 것 이외의 방법으로 Delphi에서 TCP 포트를 사용할 수 있는지 확인하는 더 좋은 방법이 있습니까?Delphi에서 TCP 포트를 사용할 수 있는지 확인하는 방법은 무엇입니까?
4
A
답변
4
나는 Indy의 구성 요소를 사용하여 그렇게 할 수 있다고 생각합니다. 예를 들어 TIdHTTPServer
은 포트가 열려있을 때 사용 중이면 예외를 발생시킵니다.
기본적으로 그러한 구성 요소를 만들고 localhost:<yourport>
에 바인딩 할 수 있으며 예외가 발생하면 (잡아서 확인하십시오) 포트가 사용 중이며 그렇지 않은 경우 사용 가능합니다.
나는 다른 indy 구성 요소가 포트가 열려 있는지 여부를 알 수 있지만 지금은 볼 수 없다고 생각합니다.
이것은 접근 방법을 제공하기위한 것입니다.
6
@Mattl은 사용 가능한 경우이 코드를 사용할 수 있음을 의미합니다.
program CheckTCP_PortOpen;
{$APPTYPE CONSOLE}
uses
Winsock; //Windows Sockets API Unit
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;
var
ret : Integer;
wsdata : WSAData;
begin
Writeln('Init WinSock');
ret := WSAStartup($0002, wsdata);//initiates use of the Winsock
if ret<>0 then exit;
try
Writeln('Description : '+wsData.szDescription);
Writeln('Status : '+wsData.szSystemStatus);
if PortTCPIsOpen(80,'127.0.0.1') then
Writeln('Open')
else
Writeln('Close');
finally
WSACleanup; //terminates use of the Winsock
end;
Readln;
end.
3
잘 Synapse 작품에서 다음 코드 :
uses
blcksock;
function PortAvailable(Port:STring):boolean;
var
svr : TTCPBlockSocket;
begin
svr := TTCPBlockSocket.Create;
try
svr.Bind('0.0.0.0',Port);
svr.Listen;
result := svr.LastError = 0;
Svr.CloseSocket;
finally
svr.Free;
end;
end;
2
netstat 정보는 IP 도우미 API, 또는 IPHLPAPI.DLL에서 GetTcpTable 및 GetUdpTable 함수를 호출하여 검색 할 수 있습니다. Delphi에서 IPHLPAPI.DLL을 호출하는 방법에 대한 자세한 내용은 Network traffic monitor을 확인하십시오. 그것에 대해서도 wrappers가 있으며, 이는 JEDI API Library의 일부입니다.
필자는 오래 전 NetStat의 Delphi 버전을 작성했지만 소스 코드를 잃어 버렸습니다. 그 자원은 당신을 시작할 수 있어야합니다.
관련 문제
- 1. USB 장치가 연결된 포트를 확인하는 방법은 무엇입니까?
- 2. 런타임시 JNI (jogl)를 사용할 수 있는지 확인하는 방법은 무엇입니까?
- 3. HPUX 시스템에서 파이썬을 사용할 수 있는지 확인하는 방법은 무엇입니까?
- 4. std :: chrono :: monotonic_clock을 사용할 수 있는지 확인하는 방법은 무엇입니까?
- 5. Windows 폴더에서 콘텐츠 인덱싱을 사용할 수 있는지 확인하는 방법은 무엇입니까?
- 6. 개체가 있는지 확인하는 방법은 무엇입니까?
- 7. 현지화가 있는지 확인하는 방법은 무엇입니까?
- 8. 어레이가 있는지 확인하는 방법은 무엇입니까?
- 9. SVG 애니메이션을 사용할 수 있는지 확인하는 방법
- 10. GPRS를 사용할 수 있는지 확인하는 방법
- 11. Delphi에서 프레임을 사용할 수있는 방법은 무엇입니까?
- 12. FTP 서버에 파일이 있는지 확인하는 방법은 무엇입니까?
- 13. Perl에 디렉토리가 있는지 여부를 확인하는 방법은 무엇입니까?
- 14. matlab에서 행렬이 비어 있는지 확인하는 방법은 무엇입니까?
- 15. 배열 요소가 있는지 확인하는 방법은 무엇입니까?
- 16. OLEDB 드라이버가 시스템에 설치되어 있는지 확인하는 방법은 무엇입니까?
- 17. C 포트를 사용하여 TCP 연결에서 메시지 받기 #
- 18. 내 WebService에 연결되어 있는지 확인하는 방법은 무엇입니까?
- 19. 들어오는 TCP 연결 포트를 가져옵니다
- 20. XElement를 사용하여 요소가 있는지 확인하는 방법은 무엇입니까?
- 21. 트리거가있는 테이블 행이 있는지 확인하는 방법은 무엇입니까?
- 22. TCP 드라이버에 가상 COM 포트를 쓰는 방법은 무엇입니까?
- 23. 새 서비스를위한 기본 TCP/IP 포트를 선택하는 방법은 무엇입니까?
- 24. iPhone/iPod Phone을 사용할 수 있는지 알아 보는 방법은 무엇입니까?
- 25. SQL Server를 사용할 수 있는지 확인하는 가장 빠른 방법
- 26. .htaccess가 활성화되어 있는지 확인하는 방법은 무엇입니까?
- 27. 드라이브가 네트워크에 마운트되어 있는지 확인하는 방법은 무엇입니까?
- 28. HTTP_REQUEST가 올바른 위치에 있는지 확인하는 방법은 무엇입니까?
- 29. 설정하기 전에 이미지가 있는지 확인하는 방법은 무엇입니까?
- 30. 속성이 요소 내에 있는지 확인하는 방법은 무엇입니까?
사용할 수있는 항목은 무엇입니까? 그것에 연결하고 있습니까? 그것에 들리는가? 또는 다른 것? –