【转】组播协议原理讲解

Posted by & filed under Uncategorized.

单播、组播、广播是计算机网络上三种基本的通信方式。     单播是相互感兴趣的主机双方进行通信的方式,主机不能接收对其不感兴趣的其它主机发送的信息,属于点对点通信。     广播是主机向子网内所有主机发送信息,子网内所有主机都能收到来自某台主机的广播信息,属于点对所有点的通信。     组播则介于两者之间,是主机向一组主机发送信息,存在于某个组的所有主机都可以接收到信息,属于点对多点通信。 下边用张图表示这三种方式的数据传输: 这张图可以简单看出来这三种方式的传输方式,下边来具体细分下。 首先说下单播与组播的区别: 单播即点对点的方式进行数据传输,组播类似与一个qq群,大家上线了别人都知道,另外一个人发送消息,该群里的人都能收到(抛开隐身、离线消息)。这里只是举例子,具体实现不是这样的,这里只是让大家更容易理解一些。下边看图理解: 图中如果要用单播实现多个发送则需要同时发送三条消息,而组播只需发送一条就可以完成了,所以说组播比较节省带宽。 接下来再说下组播与广播的区别吧: 组播跟广播类似,广播可以认为是组范围最大化的组播,广播是发送给所有人,而组播是发送给一个组中的人。当然,二者还是存在显著区别的:首先,广播被限制在子网内, 不会被路由器转发。其次,主机被默认为是接收者,组播方式则需要主机主动加入。另外广播的方式容易造成网络阻塞,几年前的广播风暴相信大家到现在都没有忘记。这里没找着合适的图,大家慢慢理解吧。 组播及广播由什么设备进行转发的? 组播及广播是由交换机进行转发的,如果是没有组播功能的交换机,则组播将会视为广播发送。路由器为具有路由功能的交换机,比交换机功能更强大些,所有说路由同样支持组播方式。现在的交换机都具备组播转发的功能,所以不用担心组播方式设备不支持的情况。下边上张组播交换机转发原理图: Read more […]

【转】C#非托管内存操作结构体拷贝

Posted by & filed under Uncategorized.

      结构体的转换其实和基础类型数组转换差不多,只是结构体不能通过Marshal.Copy的方式直接转换到内存。 结构体痛byte数组的互转直接用于网络通信中还是非常方便的。 1、定义结构体 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /// <summary>    /// 测试结构体的Copy    /// </summary>    public struct TestStruct    {        public string Number;        public int[] IntMember;        public byte ByteMember;        public short ShortMember;        public override  string ToString()        {            return string.Format(“Number:” + Number + ” ByteMember:” + ByteMember + ” ShortMember:” + ShortMember Read more […]

【转】C#非托管内存拷贝转换数据

Posted by & filed under Uncategorized.

1、简介  C#专门提供了非托管内存操作的功能类System.Runtime.InteropServices.Marshal。做过C/C++互操作的朋友应该对这个类有所了解吧!   非托管内存使用的好处是方便,能够快速操作内存,在一些类型数据转换的时候能够减少运算量,提升运算速度;缺点就是会花费更多的内存,而且操作非托管内存很容易引起内存泄漏,所以使用的时候需要万分小心,在给程序员带来方便的同时,也会挖下一些隐藏的坑!  2、利用非托管内存转换基本类型数组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /// <summary> /// short数组转换成byte数组 /// </summary> /// <param name=”source”></param> /// Read more […]