로컬 네트워크의 장치에 열린 포트가 있는지 확인하려고합니다. 많은 의견을 읽은 후에 다음 코드로 실행했습니다 :Java를 사용하여 다른 장치의 포트가 열려 있는지 확인
try
{
Socket s = new Socket();
s.setReuseAddress(true);
SocketAddress sa = new InetSocketAddress(ipAddress,
port);
s.connect(sa,
1000);
return s.isConnected();
}
catch (IOException e)
{
return false;
}
이 코드는 대부분 시간이 많이 걸립니다. 드물지만 수천 개의 장치를 실행 한 후이 코드는 포트 80이 닫힌 것으로보고하지만 Apache HTTPClient를 사용하여 웹 페이지를 가져 오면 작동합니다.
어떤 아이디어가있을 수 있습니까?
을 유발할 수있는 생각 :
- 가 1000MS가 불충분 시간 제한?
- isConnected() 호출이 불필요합니까?
- setReuseAddress (true)가 잘못 되었습니까?
응답 해 주셔서 감사합니다. 더 합리적인 타임 아웃은 무엇입니까? 예외가 throw되지 않고 isConnected()가 false를 반환 할 가능성이 있습니까? setReuseAddress (true)는 다른 곳에서 언급 한 것을 보았 기 때문에 거기에 있습니다. 나는 그것을 꺼낼 것이다. 그리고 소켓 유출에 관심을 가져 주셔서 감사합니다. 그러나이 문제를 다루는 코드가 있습니다.이 토론과 관련이 없으므로 최대한 적은 코드 만 보여주고 싶었습니다. –
네트워크에 따라 제한 시간은 몇 초가되어야합니다. 불가능하지 않습니다. – EJP