• C#以太网简介


     

     1创建对象    Socket 

    1. //创建通信对象
    2. private Socket tcpClient;

    1以太网的作用是传输字节。跟串口是一样的,只是传输的物理介质不一样。

    2以太网是有协议的,跟串口是不同的。串口只在2点之间传输,以太网是一对多或一对一。

    3性能上比串口强很多。有万兆以太网

    4串口好比一个房间只有2个物理对象,以太网是有32bit的物理对象。

    5前面说的32bit,就是以太网最大能容纳的物理地址。称之为 ip 地址。

    6这32bit看似很大,但实际根本就不够用,他相当于人的手机号。

    7因为不够用的情况下,增加了网段的概念,就跟手机的区号一样。虽然总长还是32bit,但前面的区号bit变大了,留给后面的ip地址就变小了。(总长是32bit,用刀砍一下,前面的是网段,后面的是电脑ip)用刀砍的过程叫子网掩码。看到最多的是    255,255,255,0   这个0表示8个bit,就是说前面24bit表示网段,后面8bit才表示电脑ip(相当于 24bit手机区号, 8bit才是手机号码)这样的好处是类似拖线板。电源插头有24bit,插座有8bit。这样就可以拖线板去插拖线板了。最终就和树根一样。全0地址系统保留,全1地址是广播地址,所以8bit是256减去2地址是254个可用地址。

    8 前面说的32bit和255是什么关系?其实是 0x FF  FF  FF  FF 这样的,你把 0xFF换成十进制就是255了,每8个bit转换成十进制

    9这样就好理解网段了。把后面的bit位,抹零后。前面的就是网段了。可以发现掩码网段的bit位全是1(255.255.255.0)

    10 有了网段bit长度,就能知道这网段有多大。从 0x000000到0xFFFFFF 都是网段,只要网段的值是一样的,就认为是同一个局域网。

    11这个以太网怎么用,怎么收发数据?实际已经做成对象了,就好比汽车,固定的操作那几个,就能用了,不需要再去关心其他的。在电脑上想操作以太网,就需要用 Socket  这个类型。

    2 对象连接

    1. ///
    2. /// 建立连接
    3. ///
    4. /// IP地址
    5. /// 端口号
    6. public void Connect(string ip, string port)
    7. {
    8. //实例化Socket
    9. tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    10. //设置Socket属性
    11. tcpClient.SendTimeout = this.SendTimeOut;
    12. tcpClient.ReceiveTimeout = this.ReceiveTimeOut;
    13. //封装一个EndPoint对象
    14. IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), int.Parse(port));
    15. //建立连接
    16. tcpClient.Connect(endPoint);
    17. }

    这里用到了 ip地址和端口。

    前面已经讲了ip地址的组成(网段+ip地址)是32bit

    这个端口又是什么鬼? 

    这个端口是 16bit的,他是比如(192.168.0.77)这个电脑,软件用来通讯的窗口。前面讲了以太网能一对多。(比如230个人来访问你这台电脑,你就要安排230个端口(房间)来招待这些人)

    3连接成功后,就可以收发数据了

    1. #region 读取并接受
    2. ///
    3. /// 发送并接受
    4. ///
    5. ///
    6. ///
    7. private byte[] SendAndReceive(byte[] SendByte)
    8. {
    9. InteractiveLock.Enter();
    10. try
    11. {
    12. tcpClient.Send(SendByte);
    13. return ReadMessage();
    14. }
    15. catch (Exception)
    16. {
    17. return null;
    18. }
    19. finally
    20. {
    21. InteractiveLock.Leave();
    22. }
    23. }
    1. ///
    2. /// 读取缓冲区值
    3. ///
    4. ///
    5. private byte[] ReadMessage()
    6. {
    7. int count = tcpClient.Available;
    8. int cycletimer = 0;
    9. while (count == 0)
    10. {
    11. count = tcpClient.Available;
    12. cycletimer++;
    13. Thread.Sleep(20);
    14. if (cycletimer > MaxCycleTimer)
    15. {
    16. break;
    17. }
    18. }
    19. if (count == 0)
    20. {
    21. return null;
    22. }
    23. else
    24. {
    25. byte[] buffer = new byte[count];
    26. tcpClient.Receive(buffer, count, SocketFlags.None);
    27. return buffer;
    28. }
    29. }
    30. #endregion

    4收发数据结束后,记得要关闭这个连接(不能占着茅坑不拉shi )

    1. ///
    2. /// 断开连接
    3. ///
    4. public void DisConnect()
    5. {
    6. if (tcpClient != null)
    7. {
    8. tcpClient.Close();
    9. }
    10. }

    到这里,以太网的基本操作就结束了。

    剩下的是一些不重要的知识点。

    端口是16bit的,一般小于2000的端口用于网页,网页服务的80端口,用于mysql服务的3306端口个人使用的话建议端口大于49152。最大值是65535。

    还有一个DNS的类型。这个也算以太网的一部分,他用于扫描当前网段下所有的电脑ip地址(就相当于,当前手机区号下,有多少个手机号码是在 占线状态),在占线的ip下,可以查到电脑的名字。用电脑的名字或者ip都可以连接到对方。端口正确后就可以收发数据了。

    127.0.0.1 是短路地址,网卡直接屏蔽,把发的数据直接给自己。一般用于数据调试

    192.168.1.0/24      这个 /24表示网段长度,主机bit全1表示广播ip地址。全0是系统保留用。这样C网段的电脑ip地址只有254个可用。

    A类0:0.0.0.0到127.255.255.255         255.0.0.0        前  8  bit    大型网络(留给电脑的有24bit)

    B类10:128.0.0.0到191.255.255.255           255.255.0.0       前16 bit      中型网络

    C类110:192.0.0.0到223.255.255.255         255.255.255.0   前 24 bit     小型网络

    D类1110:224.0.0.0到239.255.255.255                                  前 4 bit     广播地址

    E类11110:240.0.0.0到255.255.255.255                                前 5 bit     保留地址

    //
    端口范围:1~65535 //16bit
    ip协议:地址为32位bit;

    每8位分一组,可以分4组;
    0x00.00.00.00
    0xFF.FF.FF.FF
    每组用十进制表示:
        0.    0.    0.    0
    255.255.255.255

    网段的bit位(手机区号)按数值大小分5大类:A,B,C,D,E
    A类:0+7bit(网络地址)+24bit(电脑地址) //一共32bit
    B类:10+14bit(网络地址)+16bit(主机地址) //一共32bit
    C类:110+21bit(网络地址)+8bit(主机地址) //一共32bit
    D类:1110+28bit(主机地址) //一共32bit  (组播用)
    E 类:11110+27bit(主机地址) //一共32bit  (科研用)
    /
    A类:0.0.0.0    ~127.255.255.255//多台电脑的环境
    B类:128.0.0.0~191.255.255.255//比较居中
    C类:192.0.0.0~223.255.255.255//最多254台电脑的环境(去掉全0和全1)255是广播
    D类:224.0.0.0~239.255.255.255//组播
    E 类:240.0.0.0~247.255.255.255

    主机地址全0全1有特殊用途,全1是广播。
    A类网络0.0.0.0表示本层网络所有电脑。

    802.11b是指11M的速率标准;

    802.11g是指54M的速率标准;

    802.11n是指150M的速率标准。他们向下兼容

    比如 80M /  8bit   是 每秒下载   10Mb/s

  • 相关阅读:
    【详解】如何手写实现call、apply、bind
    nodejs+vue 电子书阅读系统
    Day714. switch表达式 -Java8后最重要新特性
    阿里云体验有奖:使用PolarDB-X与Flink搭建实时数据大屏
    C++初阶(vector容器+模拟实现)
    AM@幂级数性质@幂级数和函数求解
    Java创建对象的两种情况(显式创建和隐含创建)
    ScrapeKit 和 Swift 编写程序
    第一章 概述
    【广州华锐视点】VR塔吊模拟实操考核系统
  • 原文地址:https://blog.csdn.net/cfqq1989/article/details/126654349