Cannot download torrent using monotorrent ("no connection can be made because the target machine has actively abandoned it")

I am trying to download a torrent using monotorrent . I just downloaded the sample program from the github repository and made the necessary changes.

It creates all files in a reputable location with a size of 0 bytes and no progress. When working on the stack trace, I found that it throws an exception saying no connection could be made because the target machine actively refused it . This is a handled exception. I can only see this in stacktrace.

the same torrent can be downloaded by uTorrent in the Windows operating system.

I installed the Git repository for my project here

Here is my code. Is this an 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 (ie selective downloading) PiecePicker picker = new StandardPicker(); picker = new PriorityPicker(picker); manager.ChangePicker(picker); } void StartTorrents() { engine.StartAll(); } } } 
+4
source share
2 answers

This may be due to the fact that the tracked question blocks unknown clients, like the one you are developing. Try creating a torrent using your own Monotorrents tools and upload it to a public tracker like kat.ph

0
source

If this helps, I just managed to successfully integrate MonoTorrent into my own project. I basically refused to write my own code from scratch using the sample code on the website and instead used SampleClient in the git repository. You can easily change this to suit your needs, I bet, so try giving it a spin. I would still say that the reason you get “Connection was refused” is because you are trying to use torrents on trackers that prevent torrent applications that they don’t know from participating. You say that you tried several torrents, but all of them can use the same tracker.

NTN.

0
source

Source: https://habr.com/ru/post/1491246/


All Articles