C# 多网卡 Server Listen

时间 : 2004/5/20
作者 : Robert
参考 : MSDN
电邮 : [email protected]
关键词 : TcpListener IPEndPoint IPAddress IPAddress.Any
目的 : 帮助受监听多网卡 IP 地址困扰的朋友

VC 和 BCB 中做一个 Server 的监听程序 , 只需要指定端口 , 然后监听 (Listen) 就行了 . 在 C# 找不到这个函数了 , 慢慢看 MSDN, 怎么需要指定 IP 和 Port 才能监听 , 那么多网卡的机器应该怎么席程序呢 ? 下面的程序可以解释怎么去做 .


** TcpListener ** 类别会提供简易的方法,用以在封锁的同步模式中聆听 (Listen) 和接受输入的连接要求。您可以使用 TcpClient 或 Socket 来连接 ** TcpListener ** 。使用 IPEndPoint 、本机 IP 地址和连接端口编号,或者就只用连接埠编号来建立 ** TcpListener ** 。如果您想要基础服务供货商为您指派那些值,请指定 Any 给本机 IP 地址和 0 给本机连接埠编号。如果选择要这样做,您可以使用 LocalEndpoint 来识别指派的信息。

使用 Start 方法开始聆听输入的连接要求。 ** Start ** 将会让输入的连接进入队列等候,一直到不是呼叫了 Stop 方法,就是已经将 MaxConnections 排入队列为止。使用 AcceptSocket 或 AcceptTcpClient ,从输入的连接要求队列取出连接。这两个方法将会封锁。如果想要避免封锁,您可以先使用 Pending 方法来判断连接要求是否可在队列中取得。

呼叫 ** Stop ** 方法关闭 ** TcpListener ** 。

这个建构函式可以让您指定要聆听输入连接尝试的本机 IP 地址和连接端口编号。使用这个建构函式之前,您必须使用所需的本机 IP 地址和连接端口编号来建立 IPEndPoint 。将这个 ** IPEndPoint ** 当作 _ localEP _ 参数传递给建构函式。

如果您不在乎要指派哪个本机地址,则可使用 IPAddress.Any 做为地址参数以建立 ** IPEndPoint ** ,而基础服务供货商将会指派最适当的网络地址。如果您有多个网络接口,这可能有助于简化应用程序。如果您不在乎要使用哪个本机连接埠,则可以指定 0 做为连接埠编号来建立 ** IPEndPoint ** 。在这种情况下,服务供货商将会指派介于 1024 和 5000 之间的可用连接埠编号。如果您使用这个途径,则可以藉由使用 LocalEndpoint 属性来探索什么局域网络地址和连接端口编号已经被指派。

呼叫 Start 方法以开始聆听输入的连接尝试。

** IPEndPoint ** 类别包含主机以及应用程序连接到主机服务所需的通讯端口信息。藉由结合主机的 IP 地址和服务的通讯端口编号, ** IPEndPoint ** 类别形成连接至服务的连接点 (Connection Point) 。

[C#]

//Creates an instance of the TcpListener class by providing a local endpoint.

IPAddress ipAddress = Dns.Resolve(Dns.GetHostName()).AddressList[0];

IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 11000);

try{

TcpListener tcpListener = new TcpListener(ipLocalEndPoint);

}

catch ( Exception e ){

Console.WriteLine( e.ToString());

}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus