0

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

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

但是,无论我尝试什么,它都不会让我制作一个数组。

我该怎么做?

4

3 回答 3

2

除了使用数组,您还可以使用 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(...);
}
于 2013-08-23T13:09:15.157 回答
1

创建数组(容器)后,您需要用套接字填充它。如果您有很多值,最好的方法是使用经典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();
于 2013-08-23T13:16:00.007 回答
0

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

Socket[] my_sockets = new Socket[10];

foreach(Socket a_socket in my_sockets)
{
     a_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
}
于 2013-08-23T13:15:41.183 回答