如何为同一主机和端口制作多个套接字

本文关键字:套接字 主机 | 更新日期: 2023-09-27 18:30:08

我正在尝试将多个套接字通信转发到目标套接字。所以我需要多次连接到目标套接字,但当我第二次尝试连接到它时,我会得到:

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();
    }
}

我甚至尝试将我的套接字绑定到不同的端口,但第二个套接字仍然会出现异常。

如何为同一主机和端口制作多个套接字

此错误消息表示该IP上没有打开的端口。IP是有效的,但远程主机回复说它不会接受此端口上的连接。

即使是第一次连接,也应该会出现此错误。

找出端口未打开的原因。

顺便说一句,使用异步连接会适得其反。您既没有异步的好处,也有所有的缺点。但这不是这个问题的重点。