• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang并发ping主机的方法

    利用了golang对高并发的良好支持,同目录下将ip每行一个写入pinglist.txt文件即可

    其实这个功能用linux一条命令就能搞定:

    cat pinglist.txt | xargs -P 10 -I {} ping -fc 100 {}

    package main
    
    import (
      "bufio"
      "bytes"
      "fmt"
      "io"
      "io/ioutil"
      "log"
      "os"
      "os/exec"
      "strings"
      "sync"
      "runtime"
    )
    
    func RunCMD(command string) string {
      in := bytes.NewBuffer(nil)
      cmd := exec.Command("sh")
      cmd.Stdin = in
      in.WriteString(command + "\n")
      stdout, err := cmd.StdoutPipe()
      if err != nil {
        log.Fatal(err)
      }
      defer stdout.Close()
      if err := cmd.Start(); err != nil {
        log.Fatal(err)
      }
      opBytes, err := ioutil.ReadAll(stdout)
      if err != nil {
        log.Fatal(err)
      }
      return string(opBytes)
    }
    
    func ping(ip string) string {
      cmd := "ping -fc 100 " + ip
      return RunCMD(cmd)
    }
    
    var ips = []string{}
    
    func main() {
      runtime.GOMAXPROCS(runtime.NumCPU())
      fileName := "pinglist.txt"
      f, err := os.Open(fileName)
      if err != nil {
        fmt.Println(err)
      }
      buf := bufio.NewReader(f)
      for {
        line, err := buf.ReadString('\n')
        line = strings.TrimSpace(line)
        if err != nil {
          if err == io.EOF {
            //fmt.Println("File read over!")
            break
          }
          fmt.Println(err)
        }
        ips = append(ips, line)
      }
      wg := sync.WaitGroup{}
      ch := make(chan string, len(ips))
      //fmt.Println(ips)
      for i:= 0; i  len(ips); i++ {
        wg.Add(1)
        go func(i int) {
          ch - ping(ips[i])
          wg.Done()
        }(i)
      }
      wg.Wait()
    
      //fmt.Println(len(ch))
      for i := 0; i  len(ips); i++ {
        fmt.Println(-ch)
      }
    }

    以上这篇golang并发ping主机的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • golang并发编程的实现
    • golang通过context控制并发的应用场景实现
    • 一百行Golang代码实现简单并发聊天室
    • golang并发下载多个文件的方法
    • gorm golang 并发连接数据库报错的解决方法
    • golang 限制同一时间的并发量操作
    上一篇:golang并发下载多个文件的方法
    下一篇:golang http 连接超时和传输超时的例子
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang并发ping主机的方法 golang,并发,ping,主机,的,