我想在 C# 中创建一个套接字数组。这就是我有 1 个套接字的方式:
static Socket my_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
但是,无论我尝试什么,它都不会让我制作一个数组。
我该怎么做?
我想在 C# 中创建一个套接字数组。这就是我有 1 个套接字的方式:
static Socket my_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
但是,无论我尝试什么,它都不会让我制作一个数组。
我该怎么做?
除了使用数组,您还可以使用 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)
}