zoukankan      html  css  js  c++  java
  • (1) Socket网络编程(C#)----TcpListener 与 TcpClient

    ◇TcpListener 用于阻止同步模式下侦听和接受传入连接请求。(用于侦听)

          ◇我们先来做一件事情,对本地机器上某一端口的侦听。

          ◇因为如果想要与外界进行通信,第一件要做的事情就是开启对端口的侦听,这就像为计算机打开了一个“门”,所有向这个“门”发送的请求(“敲门”)都会被系统接收到。

      ◇在C#中可以通过下面几个步骤完成,首先使用本机Ip地址和端口号创建一个System.Net.Sockets.TcpListener类型的实例,然后在该实例上调用Start()方法,从而开启对指定端口的侦听。

      ◇创建一个控制台程序,名为MyTcpListener具体代码,如下:

     1 using System.Net;               // 引入这两个命名空间,以下同
     2 using System.Net.Sockets;
     3 using ... //
     4 
     5 class Server {
     6     static void Main(string[] args) {
     7         Console.WriteLine("Server is running ... ");
     8         IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });
     9         TcpListener listener = new TcpListener(ip, 8500);
    10 
    11         listener.Start();           // 开始侦听
    12         Console.WriteLine("Start Listening ...");
    13 
    14         Console.WriteLine("
    
    输入"Q"键退出。");
    15         ConsoleKey key;
    16         do {
    17             key = Console.ReadKey(true).Key;
    18         } while (key != ConsoleKey.Q);
    19     }
    20 }

      ◇说明:我们利用TcpListener类的构造函数,实例化出了一个listener对象,监听了127.0.0.1(也就是本地机器)的8500端口。我们可以在“运行——》cmd——》利用命令netstate -an”来查看我们当前机器所监听的状态(可以找到这个8500端口),这里就不演示了。

    ◇TcpClient类是用于在同步阻塞模式下通过网络来连接、发送和接受数据流。(用于请求)

      ◇每创建一个新的TcpClient便相当于创建了一个新的套接字Socket去与服务端通信,.Net会自动为这个套接字分配一个端口号,上面说过,TcpClient类不过是对Socket进行了一个包装。创建TcpClient类型实例时,可以在构造函数中指定远程服务器的地址和端口号。这样在创建的同时,就会向远程服务端发送一个连接请求(“握手”),一旦成功,则两者间的连接就建立起来了。也可以使用重载的无参数构造函数创建对象,然后再调用Connect()方法,在Connect()方法中传入远程服务器地址和端口号,来与服务器建立连接。

      ◇创建一个控制台程序,名为MyTcpClient,具体代码如下:

     1 class Client {
     2     static void Main(string[] args) {
     3 
     4         Console.WriteLine("Client Running ...");
     5         TcpClient client = new TcpClient();
     6         try {
     7             client.Connect("localhost", 8500);      // 与服务器连接
     8         } catch (Exception ex) {
     9             Console.WriteLine(ex.Message);
    10             return;
    11         }
    12         // 打印连接到的服务端信息
    13         Console.WriteLine("Server Connected!{0} --> {1}",
    14             client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
    15 
    16         // 按Q退出
    17     }
    18 }

      ◇说明:其中Connect()方法中的参数就是需要连接主机的ip地址号以及端口号。

    ◇这时候我们就可以先运行MyTcpListener(不要关掉),然后再运行MyTcpClient,看看运行的结果如何。

  • 相关阅读:
    git 操作
    vim使用指北 ---- Multiple Windows in Vim
    Unity 异步网络方案 IOCP Socket + ThreadSafe Queue
    unity 四元数, 两行等价的代码
    golang的项目结构 相关知识
    stencil in unity3d
    一段tcl代码
    16_游戏编程模式ServiceLocator 服务定位
    15_游戏编程模式EventQueue
    14_ Component 游戏开发组件模式
  • 原文地址:https://www.cnblogs.com/kaolalovemiaomiao/p/5596826.html
Copyright © 2011-2022 走看看