複数のソケット通信をターゲット ソケットに転送しようとしています。そのため、そのターゲット ソケットに複数の接続を確立する必要がありますが、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 番目のソケットで例外が発生します。