บทความนี้แบ่งปันวิธี Java เพื่อทดสอบการเชื่อมต่อเครือข่ายสำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
วิธีแรก: ใช้ Java Runtime:
รหัส Java
/** * เครือข่ายทดสอบ * @param IP */โมฆะส่วนตัว getNetWorkState (สตริง IP) {รันไทม์รันไทม์ = runtime.getRuntime (); ลอง {log.info ("========================== การทดสอบเครือข่ายการเชื่อมต่อการเชื่อมต่อ IP:"+IP); กระบวนการกระบวนการ = runtime.exec ("ping" +ip); InputStream istream = process.getInputStream (); InputStreamReader iSreader = new InputStreamReader (istream, "UTF-8"); bufferedReader breader = new bufferedReader (isReader); สตริงบรรทัด = null; StringBuffer sb = new StringBuffer (); ในขณะที่ ((line = breader.readline ())! = null) {sb.append (บรรทัด); } istream.close (); isReader.close (); Breader.close (); สตริงผลลัพธ์ = สตริงใหม่ (sb.toString (). getBytes ("UTF-8")); log.info ("ผล ping:"+ผลลัพธ์); if (! stringutils.isblank (ผลลัพธ์)) {ถ้า (result.indexof ("ttl")> 0 || result.indexof ("ttl")> 0) {log.info ("เครือข่ายเป็นปกติเวลา:" + timeutil.getCurdate } else {log.info ("เครือข่ายถูกตัดการเชื่อมต่อเวลา:" + timeutil.getCurdate ("yyyy-mm-dd hh: mm: ss")); }}} catch (exception e) {log.error ("ข้อยกเว้นเครือข่าย:"+e.getMessage ()); E.PrintStackTrace (); - บนแพลตฟอร์ม Windows ไม่ได้ใช้รหัสด้านบนและ Ping IP จะสิ้นสุดลง อย่างไรก็ตามเมื่อคำสั่ง ping ไม่ทำงานในสภาพแวดล้อม Linux
มันจะติดอยู่ ping และข้อมูลเอาท์พุทในรูปแบบที่ไม่แน่นอน พิจารณาใช้วิธีอื่นในซ็อกเก็ต
วิธีที่สองไปยังซ็อกเก็ต:
รหัส Java
แพ็คเกจ com.util.network; นำเข้า java.io.ioexception; นำเข้า java.net.inetaddress; นำเข้า java.net.inetsocketaddress; นำเข้า java.net.networkinterface; นำเข้า java.net.socket; java.net.socketexception; นำเข้า java.net.unknownhostexception; นำเข้า java.util.enumeration; นำเข้า org.apache.commons.lang.stringutils; นำเข้า org.slf4j.logger; logger logger แบบคงที่ส่วนตัว = loggerFactory.getLogger (NetworkHelper.class); อินสแตนซ์เครือข่ายส่วนตัวแบบคงที่ = null; NetworkHelper getInstance () {ถ้า (อินสแตนซ์ == null) {อินสแตนซ์ = ใหม่ networkHelper (); } return อินสแตนซ์; } / ** * ทดสอบว่า ping local ip * * @param ip * @return * / public boolean isreachip (สตริง ip) {boolean isreach = false; ลอง {indeaddress address = inetAddress.getByName (ip); // ping ip นี้ถ้า (ที่อยู่อินสแตนซ์ของ java.net.inet4address) {log.info (ip + "คือที่อยู่ IPv4"); } อื่นถ้า (ที่อยู่อินสแตนซ์ของ java.net.inet6address) {log.info (ip + "คือที่อยู่ IPv6"); } else {log.info (ip + "ไม่ได้รับการจัดสรร"); } if (address.isreachable (5000)) {isReach = true; log.info ("ความสำเร็จ - ping" + ip + "โดยไม่ระบุอินเทอร์เฟซ"); } else {isReach = false; log.info ("ล้มเหลว - ping" + ip + "โดยไม่ระบุอินเทอร์เฟซ"); }} catch (exception e) {log.error ("ข้อผิดพลาดเกิดขึ้น:" + e.getMessage ()); } return isreach; } / ** * ทดสอบที่อยู่การ์ดเครือข่ายท้องถิ่นทั้งหมดเพื่อ ping ip * * @param ip * @return * / บูลีนสาธารณะ isReachNetworkInterfaces (สตริง IP) {บูลีน isReach = false; ลอง {indeaddress address = inetAddress.getByName (ip); // ping ip นี้ถ้า (ที่อยู่อินสแตนซ์ของ java.net.inet4address) {log.info (ip + "คือที่อยู่ IPv4"); } อื่นถ้า (ที่อยู่อินสแตนซ์ของ java.net.inet6address) {log.info (ip + "คือที่อยู่ IPv6"); } else {log.info (ip + "ไม่ได้รับการจัดสรร"); } if (address.isreachable (5000)) {isReach = true; log.info ("ความสำเร็จ - ping" + ip + "โดยไม่ระบุอินเทอร์เฟซ"); } else {isReach = false; log.info ("ล้มเหลว - ping" + ip + "โดยไม่ระบุอินเทอร์เฟซ"); } ถ้า (isReach) {log.info ("----------------"); การแจงนับ <TornedInterface> netInterfaces = NetworkInterface .getNetWorkInterfaces (); ในขณะที่ (netInterfaces.hasmoreElements ()) {networkInterface ni = netInterfaces.nextElement (); log.info ("การตรวจสอบอินเตอร์เฟส, displayName:" + ni.getDisplayName () + ", ชื่อ:" + ni.getName ()); if (address.isreachable (ni, 0, 5000)) {isreach = true; log.info ("Success - Ping" + IP); } else {isReach = false; log.info ("Failure - Ping" + IP); } การแจงนับ <inetaddress> ips = ni.getInetAddresses (); ในขณะที่ (ips.hasmoreElements ()) {log.info ("IP:" + ips.nextelement (). getHostaddress ()); } log.info ("------------- ตรวจสอบตอนนี้ NetworkInterface เสร็จแล้ว ----------------------"); }}} catch (exception e) {log.error ("ข้อผิดพลาดเกิดขึ้น:" + e.getMessage ()); } return isreach; } / ** * รับที่อยู่ IP ดั้งเดิมที่สามารถสร้างการเชื่อมต่อกับพอร์ตที่ระบุของโฮสต์ระยะไกล * @param remoteaddr * @param พอร์ต * @return * / สตริงสาธารณะ getReachableIp การแจงนับ <TornedInterface> netInterfaces; ลอง {netInterfaces = networkInterface.getNetWorkInterfaces (); ในขณะที่ (netInterfaces.hasmoreElements ()) {networkInterface ni = netInterfaces.nextElement (); การแจงนับ <NetAddress> localAddrs = ni.getInetAddresses (); ในขณะที่ (localAddrs.hasmoreElements ()) {inetaddress localAddr = localAddrs.nextElement (); ถ้า (isreachable (localAddr, remoteaddr, พอร์ต, 5000)) {retip = localAddr.getHostaddress (); หยุดพัก; }}}} catch (socketexception e) {log.error ("เกิดข้อผิดพลาดในขณะที่แสดงรายการที่อยู่เครือข่ายท้องถิ่นทั้งหมด:" + e.getMessage ()); } if (retip == null) {log.info ("พบ IP ในท้องถิ่นที่เข้าถึงได้ null!"); } else {log.info ("พบ IP ในท้องถิ่นที่เข้าถึงได้คือ" + retip); } return retip; } / ** * รับที่อยู่ IP ดั้งเดิมที่สามารถสร้างการเชื่อมต่อกับพอร์ตที่ระบุของโฮสต์ระยะไกล * @param remoteip * @param พอร์ต * @return * / สตริงสาธารณะ getReachableIp (String remoteip, พอร์ต int) {String retip = null; InetAddress remoteaddr = null; การแจงนับ <TornedInterface> netInterfaces; ลอง {remoteaddr = inetaddress.getByName (remoteip); netInterfaces = networkInterface.getNetWorkInterfaces (); ในขณะที่ (netInterfaces.hasmoreElements ()) {networkInterface ni = netInterfaces.nextElement (); การแจงนับ <NetAddress> localAddrs = ni.getInetAddresses (); ในขณะที่ (localAddrs.hasmoreElements ()) {inetaddress localAddr = localAddrs.nextElement (); ถ้า (isreachable (localAddr, remoteaddr, พอร์ต, 5000)) {retip = localAddr.getHostaddress (); หยุดพัก; }}}} catch (UnknownHostException E) {log.error ("เกิดข้อผิดพลาดในขณะที่แสดงรายการที่อยู่เครือข่ายท้องถิ่นทั้งหมด:"+ e.getMessage ()); } catch (socketexception e) {log.error ("เกิดข้อผิดพลาดในขณะที่แสดงรายการที่อยู่เครือข่ายท้องถิ่นทั้งหมด:"+ e.getMessage ()); } if (retip == null) {log.info ("พบ IP ในท้องถิ่นที่เข้าถึงได้ null!"); } else {log.info ("พบ IP ในท้องถิ่นที่เข้าถึงได้คือ" + retip); } return retip; } / ** * ทดสอบว่า localInetAddr สามารถสร้างการเชื่อมต่อกับพอร์ตโฮสต์ระยะไกลที่ระบุ * * @param localInetaddr * @param remoteinetaddr * @param พอร์ต * @param timeout * @return * / บูลีนสาธารณะ ซ็อกเก็ตซ็อกเก็ต = null; ลอง {ซ็อกเก็ต = ซ็อกเก็ตใหม่ (); // ตั้งค่าหมายเลขพอร์ตเป็น 0 เพื่อระบุว่าคุณเลือกพอร์ตที่มีอยู่ในเครื่องสำหรับการเชื่อมต่อ SocketAddress localsocketaddr = ใหม่ inetSocketAddress (localInetAddr, 0); socket.bind (localsocketaddr); InetSocketAddress EndpointSocketAddr = ใหม่ InetSocketAddress (RemoteInetAddr, พอร์ต); Socket.Connect (EndpointSocketAddr, หมดเวลา); log.info ("ความสำเร็จ - สร้างการเชื่อมต่อ! local:" + localinetaddr.gethostaddress () + "ระยะไกล:" + remoteinetaddr.gethostaddress () + "พอร์ต" + พอร์ต); isreachable = true; } catch (ioexception e) {log.error ("Failre - ไม่สามารถเชื่อมต่อได้! local:" + localinetaddr.gethostaddress () + "ระยะไกล:" + remoteinetaddr.gethostaddress () + "พอร์ต" + พอร์ต); } ในที่สุด {ถ้า (ซ็อกเก็ต! = null) {ลอง {socket.close (); } catch (ioexception e) {log.error ("เกิดข้อผิดพลาดขณะปิดซ็อกเก็ต:" + e.getMessage ()); }}} return isreachable; } / ** * ทดสอบว่า LocalIP สามารถสร้างการเชื่อมต่อกับพอร์ตโฮสต์ระยะไกลที่ระบุ * * @param localip * @param remoteip * @param พอร์ต * @param timeout * @return * / บูลีนสาธารณะที่สามารถเข้าถึงได้ ซ็อกเก็ตซ็อกเก็ต = null; inetaddress localInetAddr = null; InetAddress RemoteInetAddr = null; ลอง {localInetAddr = inetAddress.getByName (LocalIP); remoteInetAddr = inetAddress.getByName (remoteip); ซ็อกเก็ต = ซ็อกเก็ตใหม่ (); // ตั้งค่าหมายเลขพอร์ตเป็น 0 เพื่อระบุว่าคุณเลือกพอร์ตที่มีอยู่ในเครื่องสำหรับการเชื่อมต่อ SocketAddress localsocketaddr = ใหม่ inetSocketAddress (localInetAddr, 0); socket.bind (localsocketaddr); InetSocketAddress EndpointSocketAddr = ใหม่ InetSocketAddress (RemoteInetAddr, พอร์ต); Socket.Connect (EndpointSocketAddr, หมดเวลา); log.info ("ความสำเร็จ - สร้างการเชื่อมต่อ! local:" + localinetaddr.gethostaddress () + "ระยะไกล:" + remoteinetaddr.gethostaddress () + "พอร์ต" + พอร์ต); isreachable = true; } catch (ioexception e) {log.error ("Failre - ไม่สามารถเชื่อมต่อได้! local:" + localinetaddr.gethostaddress () + "ระยะไกล:" + remoteinetaddr.gethostaddress () + "พอร์ต" + พอร์ต); } ในที่สุด {ถ้า (ซ็อกเก็ต! = null) {ลอง {socket.close (); } catch (ioexception e) {log.error ("เกิดข้อผิดพลาดขณะปิดซ็อกเก็ต:" + e.getMessage ()); }}} return isreachable; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ถ้า (NetworkHelper.getInstance (). isReachip ("192.168.126.128")) {log.info ("======= native สามารถ ping ip:"+"192.168.168.126.128" } else {log.info ("========= ping ดั้งเดิมไม่ได้ ping IP:"+"192.168.126.128"); } if (NetworkHelper.getInstance (). isReachNetWorkInterfaces ("192.168.126.128")))) {log.info ("======== การ์ดเครือข่ายทั้งหมดในเครื่องสามารถ ping ip:"+"192.168.126.128.128"); } else {log.info ("======== การ์ดเครือข่ายทั้งหมดในเครื่องไม่สามารถ ping IP:"+"192.168.126.128"); } String localip = networkhelper.getInstance (). getReachableIp ("192.168.126.128", 8081); if (! stringUtils.isblank (localip)) {log.info ("========= native Machine สามารถสร้าง IP สำหรับการเชื่อมต่อกับ IP:"+"192.168.126.128"+", พอร์ต:"+8081+ ":"+ท้องถิ่น); } else {log.info ("======= native Machine ไม่สามารถสร้าง IP สำหรับการเชื่อมต่อกับ IP:"+"192.168.126.128"+", พอร์ต:"+8081+ ""); - ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น