0

C# でソケットの配列を作成したいと思います。これは私が1つのソケットを持っている方法です:

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

しかし、何を試しても配列を作成できません。

どうすればいいのですか?

4

3 に答える 3

2

配列を使用する代わりに、基本的に配列であるリストを使用できますが、Linq を使用して追加/削除や検索などの柔軟性が向上し、より柔軟になります。リストを宣言して 3 つのソケットを追加する方法の例を次に示します。

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

2 つの手順を 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 に答える