예제 #1
0
        /// <summary>
        ///     比较指定 <see cref="TcpLink" /> 对象是否与当前对象相同。
        /// </summary>
        /// <param name="obj">需要比较的对象。</param>
        /// <returns>如果两个对象表示的连接相同返回 <see langword="true" />,否则返回<see langword="false" />。</returns>
        public bool Equals(TcpLink obj)
        {
            if (obj is null)
            {
                return(false);
            }

            return(obj.SrcAddress.Equals(SrcAddress) &&
                   obj.SrcPort.Equals(SrcPort) &&
                   obj.DstAddress.Equals(DstAddress) &&
                   obj.DstPort.Equals(DstPort));
        }
예제 #2
0
        /// <summary>
        ///     为 <see cref="TcpLink" /> 对象排序提供比较方法
        /// </summary>
        /// <param name="a">第一个排序对象</param>
        /// <param name="b">第二个排序对象</param>
        /// <returns>默认以IP地址及端口升序规则返回结果</returns>
        public static int SortMethod(TcpLink a, TcpLink b)
        {
            int result;

            // 比较源地址
            var aBytes = a.SrcAddress.GetAddressBytes();
            var bBytes = b.SrcAddress.GetAddressBytes();

            try {
                for (var i = 0; i < 4; i++)
                {
                    if ((aBytes[i] & 0xFF) < (bBytes[i] & 0xFF))
                    {
                        return(-1);
                    }
                    if ((aBytes[i] & 0xFF) > (bBytes[i] & 0xFF))
                    {
                        return(1);
                    }
                }
            }
            catch (Exception) {
                result = string.CompareOrdinal(a.SrcAddress.ToString(), b.SrcAddress.ToString());
                if (result != 0)
                {
                    return(result);
                }
            }

            // 比较源端口
            if (a.SrcPort > b.SrcPort)
            {
                return(1);
            }
            if (a.SrcPort < b.SrcPort)
            {
                return(-1);
            }

            // 比较目标地址
            aBytes = a.DstAddress.GetAddressBytes();
            bBytes = b.DstAddress.GetAddressBytes();
            try {
                for (var i = 0; i < 4; i++)
                {
                    if ((aBytes[i] & 0xFF) < (bBytes[i] & 0xFF))
                    {
                        return(-1);
                    }
                    if ((aBytes[i] & 0xFF) > (bBytes[i] & 0xFF))
                    {
                        return(1);
                    }
                }
            }
            catch (Exception) {
                result = string.CompareOrdinal(a.SrcAddress.ToString(), b.SrcAddress.ToString());
                if (result != 0)
                {
                    return(result);
                }
            }

            // 比较目标端口
            if (a.DstPort > b.DstPort)
            {
                return(1);
            }
            if (a.DstPort < b.DstPort)
            {
                return(-1);
            }

            // 相等元素(理论上不可达,若出现此现象请检查)
            return(0);
        }