简体   繁体   English

无法使用monotorrent下载torrent(“由于目标机器主动拒绝它,因此无法建立连接”)

[英]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.

相关问题 SignalR错误“由于目标机器主动拒绝连接,因此无法建立连接” - SignalR Error “No connection could be made because the target machine actively refused it” 无法建立连接,因为目标计算机主动拒绝了它216.58.212.106:443 - No connection could be made because the target machine actively refused it 216.58.212.106:443 '由于目标机器主动拒绝它,因此无法建立连接 - 'No connection could be made because the target machine actively refused it 由于目标计算机主动拒绝连接,因此无法建立连接-客户端 - No connection could be made because the target machine actively refused it - client side 无法建立连接,因为目标计算机主动拒绝了127.0.0.1:8000 - No connection could be made because the target machine actively refused it 127.0.0.1:8000 由于目标计算机主动拒绝连接,因此无法建立连接-套接字程序 - No connection could be made because the target machine actively refused it - Socket Program 没有连接,因为目标机器主动拒绝它为什么? - No connection could be made because the target machine actively refused it why? “无法建立连接,因为目标机器主动拒绝它” Nethereum 异常 - “No connection could be made because the target machine actively refused it” Nethereum exception “无法建立连接,因为目标计算机主动拒绝了它” - “No connection could be made because the target machine actively refused it” 无法建立连接,因为目标计算机主动拒绝它127.0.0.1:32450 - No connection could be made because the target machine actively refused it 127.0.0.1:32450
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM