2013-08-23 36 views
0

我想在C#中创建一个套接字数组。这是我如何有1个插座:C#插座阵列

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

但是,无论我尝试它不会让我做一个数组。

我该怎么做?

+2

阅读有关阵列http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx – wudzik

+2

'不管我尝试它不会让我的数组。 '例如? – I4V

+0

我试过 static Socket [] my_socket = new Socket [10](AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); and static Socket [] my_socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)[10]; –

回答

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

实际上,我将需要大约1000-1050个套接字来调试一个Agentserver,这就是为什么我想创建一个数组,这将节省大量的输入。 –

+0

我更新了我的答案,我认为,回答你的问题。 –

+0

感谢您的答案,它工作正常! –

0

您需要先创建数组,然后填充你的数组与套接字对象。

Socket[] my_sockets = new Socket[10]; 

foreach(Socket a_socket in my_sockets) 
{ 
    a_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 
} 
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(); 
+0

谢谢你的回答! –