有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Sigar网络速度

这个库非常适合cpu、ram和其他人员。然而,我不知道如何获得网络速度。也就是说。网络购物车在一段时间内发送和接收了多少数据?有没有办法给我这些数据

这可能是我正在寻找的吗

Tcp stat = sigar.getTcp();
stat.getInSegs() + " segments received"
stat.getOutSegs() + " segments send out"

如果sigar中没有方法,是否还有其他库可供使用

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    输出:

    {DefaultGateway=193.171.36.1, PrimaryDns=140.78.2.62,SecondaryDns=140.78.3.62, DomainName=, HostName=Schneider-PC}

    {Name=eth0, Description=WAN Miniport (IPv6), Metric=0, Type=Ethernet,Address=0.0.0.0, Mtu=1500, Netmask=0.0.0.0, Flags=65,Broadcast=0.0.0.0, Hwaddr=34:F8:20:52:41:53, Destination=0.0.0.0}

    totalrx(download): 4.7K

    totaltx(upload): 154


    totalrx(download): 1.4K

    totaltx(upload): 180

    代码:

    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import org.hyperic.sigar.NetFlags;
    import org.hyperic.sigar.NetInterfaceConfig;
    import org.hyperic.sigar.NetInterfaceStat;
    import org.hyperic.sigar.Sigar;
    import org.hyperic.sigar.SigarException;
    
    /**
     * @author Headgrowe
     * 
     */
    public class NetworkData {
    
        static Map<String, Long> rxCurrentMap = new HashMap<String, Long>();
        static Map<String, List<Long>> rxChangeMap = new HashMap<String, List<Long>>();
        static Map<String, Long> txCurrentMap = new HashMap<String, Long>();
        static Map<String, List<Long>> txChangeMap = new HashMap<String, List<Long>>();
        private static Sigar sigar;
    
        /**
         * @throws InterruptedException
         * @throws SigarException
         * 
         */
        public NetworkData(Sigar s) throws SigarException, InterruptedException {
            sigar = s;
            getMetric();
            System.out.println(networkInfo());
            Thread.sleep(1000);     
        }
    
        public static void main(String[] args) throws SigarException,
                InterruptedException {
            new NetworkData(new Sigar());
            NetworkData.newMetrickThread();
        }
    
        public static String networkInfo() throws SigarException {
            String info = sigar.getNetInfo().toString();
            info += "\n"+ sigar.getNetInterfaceConfig().toString();
            return info;
        }
        
        public static String getDefaultGateway() throws SigarException {
            return sigar.getNetInfo().getDefaultGateway();
        }
    
        public static void newMetricThread() throws SigarException, InterruptedException {
            while (true) {
                Long[] m = getMetric();
                long totalrx = m[0];
                long totaltx = m[1];
                System.out.print("totalrx(download): ");
                System.out.println("\t" + Sigar.formatSize(totalrx));
                System.out.print("totaltx(upload): ");
                System.out.println("\t" + Sigar.formatSize(totaltx));
                System.out.println("                 -");
                Thread.sleep(1000);
            }
    
        }
    
        public static Long[] getMetric() throws SigarException {
            for (String ni : sigar.getNetInterfaceList()) {
                // System.out.println(ni);
                NetInterfaceStat netStat = sigar.getNetInterfaceStat(ni);
                NetInterfaceConfig ifConfig = sigar.getNetInterfaceConfig(ni);
                String hwaddr = null;
                if (!NetFlags.NULL_HWADDR.equals(ifConfig.getHwaddr())) {
                    hwaddr = ifConfig.getHwaddr();
                }
                if (hwaddr != null) {
                    long rxCurrenttmp = netStat.getRxBytes();
                    saveChange(rxCurrentMap, rxChangeMap, hwaddr, rxCurrenttmp, ni);
                    long txCurrenttmp = netStat.getTxBytes();
                    saveChange(txCurrentMap, txChangeMap, hwaddr, txCurrenttmp, ni);
                }
            }
            long totalrx = getMetricData(rxChangeMap);
            long totaltx = getMetricData(txChangeMap);
            for (List<Long> l : rxChangeMap.values())
                l.clear();
            for (List<Long> l : txChangeMap.values())
                l.clear();
            return new Long[] { totalrx, totaltx };
        }
    
        private static long getMetricData(Map<String, List<Long>> rxChangeMap) {
            long total = 0;
            for (Entry<String, List<Long>> entry : rxChangeMap.entrySet()) {
                int average = 0;
                for (Long l : entry.getValue()) {
                    average += l;
                }
                total += average / entry.getValue().size();
            }
            return total;
        }
    
        private static void saveChange(Map<String, Long> currentMap,
                Map<String, List<Long>> changeMap, String hwaddr, long current,
                String ni) {
            Long oldCurrent = currentMap.get(ni);
            if (oldCurrent != null) {
                List<Long> list = changeMap.get(hwaddr);
                if (list == null) {
                    list = new LinkedList<Long>();
                    changeMap.put(hwaddr, list);
                }
                list.add((current - oldCurrent));
            }
            currentMap.put(ni, current);
        }
    
    }