1

複数のソケット通信をターゲット ソケットに転送しようとしています。そのため、そのターゲット ソケットに複数の接続を確立する必要がありますが、2 回目に接続しようとすると、次のようになります。

SocketException: No connection could be made because the target machine actively refused it

問題はソケットのもう一方の端、つまりポートとホストにあると思います。プログラムに関連するポートとターゲットポートの間に既に接続があるため、2番目の接続を作成するには、プログラムに2番目のポートが必要です。私の問題が皆さんにとって明確であることを願っています。それを行う方法はありますか?

これは、問題を示すためだけのテスト プログラムです。

using System;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.Text;

class Sample
{
    private static ManualResetEvent connectDone = new ManualResetEvent(false);
    public static void Main()
    {
        Socket[] s = new Socket[10];
        for (int i = 0; i < s.Length; i++)
        {
            IPAddress ipAddress;
            ipAddress = IPAddress.Parse("127.0.0.1");
            IPEndPoint localEndp = new IPEndPoint(ipAddress, 1100);

            // Create a TCP/IP socket.
            s[i] = new Socket(ipAddress.AddressFamily,
                SocketType.Stream, ProtocolType.Tcp);

            connectDone.Reset();
            s[i].BeginConnect(localEndp,
            new AsyncCallback(ConnectCallback), s[i]);
            connectDone.WaitOne();
            s[i].Send(Encoding.ASCII.GetBytes(i.ToString() + ": hi.\r\n"));
        }
    }

    private static void ConnectCallback(IAsyncResult ar)
    {
        Socket client = (Socket)ar.AsyncState;

        // Complete the connection.
        client.EndConnect(ar);

        // Signal that the connection has been made.
        connectDone.Set();
    }
}

ソケットを別のポートにバインドしようとしましたが、それでも 2 番目のソケットで例外が発生します。

4

1 に答える 1

1

このエラー メッセージは、その IP に開いているポートがないことを意味します。IP は有効ですが、リモート ホストは、このポートでの接続を受け入れないと応答しました。

最初の接続でもこのエラーが発生するはずです。

ポートが開いていない理由を調べます。

ところで、非同期接続の使用は非生産的です。非同期の利点はなく、すべての欠点があります。しかし、これはこの質問のポイントではありません。

于 2013-12-18T11:50:48.017 に答える