[英]can not download torrent using monotorrent (“no connection could be made because the target machine actively refused it”)
I am trying to download a torrent using monotorrent . 我试图使用monotorrent下载torrent。 I have just download a sample program from its github repository and have made required changes. 我刚刚从其github存储库下载了一个示例程序,并进行了必要的更改。
It is creating all files on respected location with size of 0 bytes and no progress. 它在受尊重的位置创建所有文件,大小为0字节且没有进度。 When running through stack trace, I found that it is throwing an exception saying no connection could be made because the target machine actively refused it
. 当运行堆栈跟踪时,我发现它抛出一个异常,说no connection could be made because the target machine actively refused it
。 This is an handled exception. 这是一个处理过的例外。 I can only see this in stacktrace. 我只能在stacktrace中看到这个。
The same torrent can be downloaded by uTorrent program on my windows operating system. 我的Windows操作系统上的uTorrent程序可以下载相同的torrent 。
I have set upped the Git repository for my project here 我在这里为我的项目设置了Git存储库
Here is all my code. 这是我的所有代码。 Is this incomplete code..? 这是不完整的代码..? What else do I need to add..? 我还需要添加什么..?
using System;
using System.Collections.Generic;
using MonoTorrent.Client;
using MonoTorrent.Client.Encryption;
using System.IO;
using MonoTorrent.Common;
using System.Net;
using System.Web;
using MonoTorrent.Tracker;
using MonoTorrent.Tracker.Listeners;
namespace Samples
{
public class ClientSample
{
BanList banlist;
ClientEngine engine;
List<TorrentManager> managers = new List<TorrentManager>();
public ClientSample()
{
//StartTracker();
SetupEngine();
//SetupBanlist();
LoadTorrent();
StartTorrents();
}
void SetupEngine()
{
EngineSettings settings = new EngineSettings();
settings.AllowedEncryption = ChooseEncryption();
// If both encrypted and unencrypted connections are supported, an encrypted connection will be attempted
// first if this is true. Otherwise an unencrypted connection will be attempted first.
settings.PreferEncryption = true;
// Torrents will be downloaded here by default when they are registered with the engine
//settings.SavePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Torrents");
settings.SavePath = HttpContext.Current.Request.MapPath("~/Torrents/");
// The maximum upload speed is 200 kilobytes per second, or 204,800 bytes per second
settings.GlobalMaxUploadSpeed = 200 * 1024;
engine = new ClientEngine(settings);
// Tell the engine to listen at port 6969 for incoming connections
engine.ChangeListenEndpoint(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6969));
}
EncryptionTypes ChooseEncryption()
{
EncryptionTypes encryption;
// This completely disables connections - encrypted connections are not allowed
// and unencrypted connections are not allowed
encryption = EncryptionTypes.None;
// Only unencrypted connections are allowed
encryption = EncryptionTypes.PlainText;
// Allow only encrypted connections
encryption = EncryptionTypes.RC4Full | EncryptionTypes.RC4Header;
// Allow unencrypted and encrypted connections
encryption = EncryptionTypes.All;
encryption = EncryptionTypes.PlainText | EncryptionTypes.RC4Full | EncryptionTypes.RC4Header;
return encryption;
}
void SetupBanlist()
{
banlist = new BanList();
if (!File.Exists("banlist"))
return;
// The banlist parser can parse a standard block list from peerguardian or similar services
BanListParser parser = new BanListParser();
IEnumerable<AddressRange> ranges = parser.Parse(File.OpenRead("banlist"));
banlist.AddRange(ranges);
// Add a few IPAddress by hand
banlist.Add(IPAddress.Parse("12.21.12.21"));
banlist.Add(IPAddress.Parse("11.22.33.44"));
banlist.Add(IPAddress.Parse("44.55.66.77"));
engine.ConnectionManager.BanPeer += delegate(object o, AttemptConnectionEventArgs e)
{
IPAddress address;
// The engine can raise this event simultaenously on multiple threads
if (IPAddress.TryParse(e.Peer.ConnectionUri.Host, out address))
{
lock (banlist)
{
// If the value of e.BanPeer is true when the event completes,
// the connection will be closed. Otherwise it will be allowed
e.BanPeer = banlist.IsBanned(address);
}
}
};
}
void LoadTorrent()
{
// Load a .torrent file into memory
//Torrent torrent = Torrent.Load("myfile.torrent");
Torrent torrent = Torrent.Load(HttpContext.Current.Request.MapPath("~/myfile.torrent"));
// Set all the files to not download
foreach (TorrentFile file in torrent.Files)
file.Priority = Priority.Normal;
// Set the first file as high priority and the second one as normal
//torrent.Files[0].Priority = Priority.Highest;
//torrent.Files[1].Priority = Priority.Normal;
//TorrentManager manager = new TorrentManager(torrent, "DownloadFolder", new TorrentSettings());
TorrentManager manager = new TorrentManager(torrent, HttpContext.Current.Request.MapPath("~/Torrents/"), new TorrentSettings());
managers.Add(manager);
engine.Register(manager);
// Disable rarest first and randomised picking - only allow priority based picking (i.e. selective downloading)
PiecePicker picker = new StandardPicker();
picker = new PriorityPicker(picker);
manager.ChangePicker(picker);
}
void StartTorrents()
{
engine.StartAll();
}
}
}
This could be because the tracker in question blocks unknown clients like the one you're developing. 这可能是因为有问题的跟踪器阻止了您正在开发的未知客户端。 Try creating a torrent with Monotorrents own tools and uploading that to a public tracker such as kat.ph 尝试使用Monotorrents自己的工具创建一个torrent并将其上传到公共跟踪器,如kat.ph.
If it's any help, I've just managed to successfully integrate MonoTorrent into a project of my own. 如果有任何帮助,我只是成功地将MonoTorrent集成到我自己的项目中。 I basically gave up writing my own code from scratch using the sample code on the website, and instead used the SampleClient in the git repo. 我基本上放弃了使用网站上的示例代码从头开始编写自己的代码,而是使用git repo中的SampleClient。 You can easily modify that to suit your needs I bet, so try giving that a spin. 你可以很容易地修改它以满足我的需要,所以试着给它一个旋转。 I'd still say the reason you're getting "Connection was refused"-errors is because you're attempting torrents on trackers that don't allow torrent-applications they don't know to participate. 我仍然说你得到“连接被拒绝”的原因 - 错误是因为你正试图在不允许他们不知道参与的洪流应用程序的跟踪器上使用种子。 You say you've tried several torrents but these might all be using the same tracker. 你说你已经尝试了几种种子,但这些种子可能都使用相同的跟踪器。
HTH. HTH。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.