C#以太网简介
1创建对象 Socket
//创建通信对象
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 对象连接
/// <summary>
/// 建立连接
/// </summary>
/// <param name="ip">IP地址</param>
/// <param name="port">端口号</param>
public void Connect(string ip, string port)
{
//实例化Socket
tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//设置Socket属性
tcpClient.SendTimeout = this.SendTimeOut;
tcpClient.ReceiveTimeout = this.ReceiveTimeOut;
//封装一个EndPoint对象
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), int.Parse(port));
//建立连接
tcpClient.Connect(endPoint);
}
这里用到了 ip地址和端口。
前面已经讲了ip地址的组成(网段+ip地址)是32bit
这个端口又是什么鬼?
这个端口是 16bit的,他是比如(192.168.0.77)这个电脑,软件用来通讯的窗口。前面讲了以太网能一对多。(比如230个人来访问你这台电脑,你就要安排230个端口(房间)来招待这些人)
3连接成功后,就可以收发数据了
#region 读取并接受
/// <summary>
/// 发送并接受
/// </summary>
/// <param name="SendByte"></param>
/// <returns></returns>
private byte[] SendAndReceive(byte[] SendByte)
{
InteractiveLock.Enter();
try
{
tcpClient.Send(SendByte);
return ReadMessage();
}
catch (Exception)
{
return null;
}
finally
{
InteractiveLock.Leave();
}
}
/// <summary>
/// 读取缓冲区值
/// </summary>
/// <returns></returns>
private byte[] ReadMessage()
{
int count = tcpClient.Available;
int cycletimer = 0;
while (count == 0)
{
count = tcpClient.Available;
cycletimer++;
Thread.Sleep(20);
if (cycletimer > MaxCycleTimer)
{
break;
}
}
if (count == 0)
{
return null;
}
else
{
byte[] buffer = new byte[count];
tcpClient.Receive(buffer, count, SocketFlags.None);
return buffer;
}
}
#endregion
4收发数据结束后,记得要关闭这个连接(不能占着茅坑不拉shi )
/// <summary>
/// 断开连接
/// </summary>
public void DisConnect()
{
if (tcpClient != null)
{
tcpClient.Close();
}
}
到这里,以太网的基本操作就结束了。
剩下的是一些不重要的知识点。
端口是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
前排啃鸡爪: 感谢大佬,对于我这种小白正好合适
m0_74886474: 哥,之前我看您发了一篇有关C#解析G代码的帖子,您方便帮我解答一些问题吗
最帅的皮皮虾: 可以发源码吗
qianqian070802: 你好,博主,有以太网转Can的例子吗
༄误区࿐: 以太网配置地址界面什么都没有怎么办