网上示例较少,有需要研究,例如进度条之类…
package main
import "github.com/anacrolix/torrent"
func main() {
c, _ := torrent.NewClient(nil)
t, _ := c.AddMagnet("magnet:?xt=urn:btih:4418164d056abc248c4f0ba07c676ee01f3eb72d&dn=%e5%8f%a4%e6%a5%bc%e9%95%87%e9%99%b5%e5%ae%ab&tr=udp%3a%2f%2fopentracker.i2p.rocks%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.altrosky.nl%3a6969%2fannounce")
<-t.GotInfo()
t.DownloadAll()
c.WaitAll()
c.Close()
}
通过BitComet制作BT文件并做种,获取到磁链。在制作BT文件中,估计是因为(联通)内网的原因,根本没有流量。在制作Torrent文件时,Web种子中添加一个可供Web下载的地址,做种成功。
但看起来并未通过Web下载,还是通过种子机上传,不知道这样的意义何在。
通过 go install github.com/anacrolix/torrent/cmd/…@latest 安装的工具 torrent 也能正常下载
这样,对于大型下载(游戏)就可以通过BT来合力了,避免了对服务器的过大需求。
现在的问题是:如何建立一个Linux下的BT服务器来做种。
为了便于显示下载进度,进一步修改
package main
import (
"fmt"
"time"
"github.com/anacrolix/torrent"
)
func main() {
c, _ := torrent.NewClient(nil)
t, _ := c.AddMagnet("magnet:?xt=urn:btih:LOLUF4AH2VFA4KJ4VKTCMKUT2Q45QFK4&xt=urn:btmh:1220aebf370a0626f0f97226b34fa13c9c1ec33085acec149158ea04a98d1e80466c&dn=Engine2D.zip&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&xl=241547266")
go func() {
for {
time.Sleep(time.Second * 1)
fmt.Println(t.BytesCompleted())
if t.Info() != nil {
fmt.Println(t.Info().Length)
}
}
}()
<-t.GotInfo()
t.DownloadAll()
c.WaitAll()
c.Close()
}
这里的t.Info().Length为完整长度,t.BytesCompleted为当前完成大小