2016-10-17 2 views

답변

5

TServerSocket은 사용자가 요구하는 기능을 직접 노출하지 않지만 약간의 해결 방법으로 해결할 수 있습니다.

보호 된 TAbstractSocket.Address 속성에 액세스하려면 TServerSocket에서 새 클래스를 파생해야합니다. 이것이 TServerSocket이 바인딩하는 값입니다. 이 속성은 일반적으로 액세스 할 수 없기 때문에 빈 문자열로 유지되며 0.0.0.0 (예 : INADDR_ANY, 즉 모든 로컬 IP)에 바인딩하는 것과 같습니다.

속성에 액세스 할 수있게되면 서버를 활성화하기 전에 원하는 IP로 설정하면 서버가 그에 따라 바인딩됩니다. 예를 들어

: 많은 레미

type 
    TServerSocketAccess = class(TServerSocket) 
    end; 

TServerSocketAccess(ServerSocket1).Address := '192.168.0.1'; 
ServerSocket1.Active := True; 
+0

감사합니다. 이 코드는 서버 소켓 주소 값을 성공적으로 업데이트하고 있습니다. 그러나 서버 응용 프로그램은 주소 속성이 명시 적으로 IP로 설정된 후에도 다른 모든 IP 주소에 계속 응답합니다. 왜 그런지 알고 있니? 델파이 소켓 제한입니까? – LastManStanding

+0

@LastManStanding ** 서버가 활성화 된 시점에 ** 주소가 비어있는 경우에만 설명하는 내용이 ** 발생할 수 있습니다. 청취 소켓은 설정된 IP에 바인딩되며 해당 IP의 연결 만 수락 할 수 있습니다. 빈'Address '에 바인딩하면 모든 IP에서 연결이 가능합니다. 'Active'를 true로 설정하기 전에'Address'를 설정해야합니다. –

관련 문제