(摘) go代码的磁力文件下载

声明:内容源自网络,版权归原作者所有。若有侵权请在网页聊天中联系我

网上示例较少,有需要研究,例如进度条之类…

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为当前完成大小

相关文章