C#套接字数组

本文关键字:数组 套接字 | 更新日期: 2023-09-27 18:28:50

我想在C#中创建一个套接字数组。这就是我有1个插座的方式:

static Socket my_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

但是,无论我尝试什么,它都不会让我做出阵列。

我该怎么做?

C#套接字数组

您可以使用List,而不是使用数组,List基本上是一个数组,但经过改进,提供了更多的灵活性,例如使用Linq添加/删除和搜索。下面是一个如何声明列表并向其中添加三个套接字的示例:

List<Socket> MySocketList = new List<Socket>();
Socket Socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket Socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket Socket3 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
MySocketList.Add(Socket1);
MySocketList.Add(Socket2);
MySocketList.Add(Socket3);
// MySocketList[0] is 'Socket1'

编辑:OP评论后:

List<Socket> MySocketList = new List<Socket>();
for(int i = 0; i < 1015; i++)
{   
    Socket NewSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    MySocketList.Add(NewSocket);
}
// MySocketList now contains 1015 sockets, you can loop trough them, and open a connection:
foreach(Socket CurrentSocket in MySocketList)
{
    CurrentSocket.Connect(...);
}

创建数组(容器)后,需要用套接字填充它。如果你有很多值,最好的方法是使用经典的for循环:

// Declaration
Socket[] sockets = new Socket[numberOfSocketsYouNeed];
// Initalization
for (int i = 0; i < numberOfSocketsYouNeed; i++)
{
    sockets[i] = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}

您也可以使用LINQ合并这两个步骤,但对于较大的阵列,您会得到较小的性能打击。

Scoket[] sockets = Enumerable.Range(0, numberOfSocketsYouNeed)
                     .Select(_ => new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
                     .ToArray();

您需要首先创建数组,然后用套接字对象填充数组。

Socket[] my_sockets = new Socket[10];
foreach(Socket a_socket in my_sockets)
{
     a_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
}