我正在尝试将多个套接字通信转发到目标套接字。所以我需要与目标套接字建立多个连接,但是当我第二次尝试连接它时,我得到了这个:
SocketException: No connection could be made because the target machine actively refused it
我认为问题出在套接字的另一端,即端口和主机,因为与我的程序和目标端口相关的端口之间已经有连接,要有第二个连接我需要第二个端口用于我的程序。 我希望你的问题能清楚。 任何想法怎么做?
这是一个只是为了显示问题的测试程序。
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();
}
}
我甚至尝试将我的套接字绑定到不同的端口,但仍然是第二个套接字获得该异常。
答案 0 :(得分:0)
此错误消息表示该IP上没有打开的端口。 IP有效,但远程主机回复说它不接受此端口上的连接。
即使是第一次连接,您也应该收到此错误。
找出端口未打开的原因。
顺便说一下,你使用async connect会适得其反。你没有异步的好处和所有的缺点。但这不是这个问题的重点。