C# 多网卡 Server Listen

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

 

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

 

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

}

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C# 中使用 SQL Server 进行多条件查询,可以使用 SQL 语句的 WHERE 子句和 AND 或 OR 运算符。 例如,我们要查询一个名为 "students" 的表中,所有姓为 "张",并且年龄大于等于 18 岁的学生信息,可以使用以下 SQL 语句: ``` SELECT * FROM students WHERE 姓 = '张' AND 年龄 >= 18; ``` 在 C# 中,可以使用 ADO.NET 提供的 SqlCommand 对象来执行 SQL 语句。以下是一个示例代码: ```csharp using System.Data.SqlClient; // 创建连接 using (SqlConnection connection = new SqlConnection(connectionString)) { // 创建命令 string sql = "SELECT * FROM students WHERE 姓 = @name AND 年龄 >= @age;"; SqlCommand command = new SqlCommand(sql, connection); // 添加参数 command.Parameters.AddWithValue("@name", "张"); command.Parameters.AddWithValue("@age", 18); // 打开连接 connection.Open(); // 执行查询 using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { // 处理查询结果 // ... } } } ``` 其中,`connectionString` 是连接字符串,可以根据实际情况进行修改。`@name` 和 `@age` 是参数名,可以自定义,但必须与 SQL 语句中的参数名相同。`command.Parameters.AddWithValue` 方法用于添加参数,第一个参数是参数名,第二个参数是参数值。 执行查询的代码使用了 `SqlDataReader` 对象,它可以逐行读取查询结果。在 `while (reader.Read())` 循环中,可以使用 `reader` 对象的方法获取每一行数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三杯倒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值