현재 SNMP 프린터 모니터 소프트웨어에 대한 자동 검색 기능을 개발 중입니다. 특정 IP 주소의 장치가 포트 9100에 응답하는지 확인하기 위해 범위의 IP를 검사하는 여러 스레드에서 실행되는 도우미 메서드가 필요합니다.이 메서드는 포트 9100에 실제로 응답합니다. SNMP 요청.IP 주소 및 포트가 응답하는지 확인하십시오.
나는 이것이 올바른 접근 방법인지, 그리고 컨텍스트에 따라이 컨텍스트에서 Close() 메서드를 올바르게 사용하고 있는지를 인식하지 못하고 있지만 (Dispose()를 볼 수 있음) Disconnect() 및 Shutdown() 메서드도 사용할 수 있으므로 사용할 수 있습니까?). 또한 최대 시간 제한 값을 설정해야합니다. 5 초가 걸리므로 스레드가 너무 오래 울리지 않아 결과를 나타냅니다. 지금까지 내 코드 :
private bool GetTCPPrinterResponse(IPAddress _ip)
{
int port = 9100;
bool isResponsive = false;
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
s.Connect(_ip, port);
isResponsive = true;
}
catch (SocketException)
{
isResponsive = false;
}
finally
{
s.Close();
}
return isResponsive;
}
방법 편집 후 : 제한 시간 속성의
private bool GetTCPPrinterResponse(IPAddress _ip)
{
int port = 9100;
bool isResponsive = false;
using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
s.ReceiveTimeout = 3000;
s.SendTimeout = 3000;
try
{
s.Connect(_ip, port);
isResponsive = true;
}
catch (SocketException)
{
isResponsive = false;
}
}
return isResponsive;
}
설정은 효과가 없습니다.
'Dispose'는 "개체에서 사용중인 메모리를 해제하지 않습니다". Dispose는 관리되지 않는 * 자원을 해제하기위한 것입니다. 그래,이 경우에는 관리되지 않는 메모리 버퍼가 포함될 수 있지만 실제로 개체가 사용하는 메모리는 포함되지 않습니다. 이 메모리는 필요한 경우 향후 시점에서 GC에 의해 릴리스됩니다. –
귀하의 기여에 감사드립니다. IDisposable의 Socket 클래스 구현을 활용하고 시간 제한 값을 추가하기 위해 메서드를 다시 작성했습니다. 그러나, 후자는 효과가없는 것으로 보인다. 이 메소드는 15 초가 지난 후에 결과를 리턴합니다 (기본 시간 초과 값으로 의심됩니다). – MartinChristensen