亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
[練習(xí)]go版的并發(fā)ping
[打印本頁]
作者:
laputa73
時(shí)間:
2013-11-26 16:54
標(biāo)題:
[練習(xí)]go版的并發(fā)ping
本帖最后由 laputa73 于 2013-12-10 12:06 編輯
在<Go語言編程>中有icmp ping的例子,不過實(shí)際測試不通過....這個(gè)有空研究一下源碼再看.
--補(bǔ)充,原文代碼未考慮ipv4的包頭長度
_, err = conn.Read(msg[0:]) 改為
_, err = conn.Read(msg[20:])
在網(wǎng)找到了一個(gè)可用的模塊,還可以支持ipv6.
http://golangtc.com/t/526e1f8b320b522433000003
https://github.com/paulstuart/ping/blob/master/ping.go
利用協(xié)程實(shí)現(xiàn)并發(fā)ping測試
/*gorouting版本的并行ping */
package main
import (
"ping"
"fmt"
"time"
//"os"
"strconv"
)
var fin chan string; //用于實(shí)現(xiàn)joinall
//go沒有pop/shift操作,只能自己計(jì)數(shù)
var cur int
/*定義協(xié)程
ping單個(gè)目標(biāo)
輸入:目標(biāo)ip/域名
輸出:結(jié)果, 時(shí)延
*/
func doit(){
if cur >= len(iplist){
return
}
ip:=iplist[cur]
cur++
go pingr(ip,1000)
}
func pingr(host string,timeout int){
t1:=time.Now().UnixNano()
alive,err:=ping.Ping(host,timeout)
//alive,err:=true,0
t2:=time.Now().UnixNano()
fmt.Println(host,alive,(t2-t1)/1000000,err);
fin <- host
doit()
}
//定義iplist
var iplist [253]string
func main() {
//創(chuàng)建隊(duì)列
fin = make(chan string)
//數(shù)組賦值
for i := 0; i < len(iplist); i++ {
iplist[i]="192.168.99."+strconv.Itoa(i+1)
}
//控制并發(fā)
cocurrent := 100
cur =0
for j := 0; j < cocurrent; j++ {
doit()
}
//等待結(jié)束
for i := 0; i < len(iplist); i++ {
<-fin
//fmt.Println(ip,"joined")
}
}
復(fù)制代碼
作者:
__b1ueguy__
時(shí)間:
2013-11-30 22:10
看看這是難點(diǎn)
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2