System.Net.Sockets.TcpListener

监听来自于 TCP 网络客户端的连接。

命名空间:System.Net.Sockets 汇编集:System(在 system.dll 中)
语法
public class TcpListener
备注

TcpListener 类提供了能够在同步阻塞模式中监听并且接受输入连接请求的简单方法。你可以使用 TcpClient 或者 Socket 来连接到 TcpListener。也可以使用 IPEndPoint、本地 IP 地址和端口号,或者只是一个端口号来创建 TcpListener。如果你需要底层服务提供者来分配这些值,就可以把本地端口号指定成任何本地 IP 地址和 0。如果你选择这样做,那么你可以在套接字已经连接之后,使用 LocalEndpoint 属性来识别已分配的信息。

使用 Start 方法开始对输入连接请求进行监听。Start 方法将会队列化输入连接,直到调用 Stop 方法或者它已经达到了队列化的上限 MaxConnections 为止。使用 AcceptSocket 或者 AcceptTcpClient 可以把连接从输入连接请求队列中拖出。并且这两种方法都会被阻塞。如果你需要避免被阻塞,那么可以先使用 Pending 方法来检测队列中的连接请求是否可用。

调用 Stop 方法来关闭 TcpListener。

提示:Stop 方法并不会关闭任何已接受的连接。并且你应该负责关闭这些连接。

范例

下列代码创建了一个 TcpListener。

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

class MyTcpListener
{
  public static void Main()
  { 
    TcpListener server=null;   
    try
    {
      // 设置端口为 13000 的 TcpListener。
      Int32 port = 13000;
      IPAddress localAddr = IPAddress.Parse("127.0.0.1");
      
      // TcpListener server = new TcpListener(port);
      server = new TcpListener(localAddr, port);

      // 为客户端请求启动监听。
      server.Start();
         
      // 为读取数据而准备缓存
      Byte[] bytes = new Byte[256];
      String data = null;

      // 进入监听循环。
      while(true) 
      {
        Console.Write("Waiting for a connection... ");
        
        // 完成一个阻塞调用来接受请求。
        // 你同样可以在这里使用 AcceptSocket()。
        TcpClient client = server.AcceptTcpClient();            
        Console.WriteLine("Connected!");

        data = null;

        // 获取一个数据流对象来进行读取和写入
        NetworkStream stream = client.GetStream();

        int i;

        // 循环接收客户端所发送的所有数据。
        while((i = stream.Read(bytes, 0, bytes.Length))!=0) 
        {   
          // 把数据字符转化成 ASCII 字符串。
          data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
          Console.WriteLine("Received: {0}", data);
       
          // 处理客户端所发送的数据。
          data = data.ToUpper();

          byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

          // 回发一个请求。
          stream.Write(msg, 0, msg.Length);
          Console.WriteLine("Sent: {0}", data);            
        }
         
        // 关闭并且结束连接
        client.Close();
      }
    }
    catch(SocketException e)
    {
      Console.WriteLine("SocketException: {0}", e);
    }
    finally
    {
       // 停止监听新的客户端。
       server.Stop();
    }

      
    Console.WriteLine("\nHit enter to continue...");
    Console.Read();
  }   
}

关于客户端的范例,请参考:[TcpClient]。

.NET Framework 安全性
  • SocketPermission:建立一个输出连接或者接受一个输入请求。
继承层次
System.Object 
  System.Net.Sockets.TcpListener

转载于:https://www.cnblogs.com/Laeb/archive/2007/03/12/671751.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值