Administrator
2021-04-13 717ac6186114fc158fffa46e3b6ab60dd70a48d2
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Diagnostics;
using System.Net.Sockets;
 
namespace Bro.Common.Link
{
    /// <summary>
    /// TCP连接
    /// </summary>
    public class TCPLink : LinkBase
    {
        // 网络连接数据流
        public NetworkStream netStream      = null;
        // 远端信息
        public string        remoteInfo {get;set;}
        // 是否远端关闭
        public bool         IsRemoteDisconn {get;set;}
 
        public TCPLink(NetworkStream stream)
        {
            this.netStream          = stream;
            this.IsRemoteDisconn    = false;
        }
 
        public TCPLink()
        {
            this.IsRemoteDisconn    = false;
        }
 
        /// <summary>
        /// 初始化
        /// </summary>
        /// <returns></returns>
        public override bool Init()
        {
            // TODO:
            return true;
        }
 
        /// <summary>
        /// 打开TCP连接
        /// </summary>
        /// <returns></returns>
        public override bool Open()
        {
            // TODO:
            return true;
        }
 
        /// <summary>
        /// 关闭TCP连接
        /// </summary>
        public override void Close()
        {
            // TODO:
            if ( null == this.netStream )
            {
                return;
            }
 
            try
            {
                this.netStream.Close();
                this.netStream = null;
 
                this.IsRemoteDisconn = true;
            }
            catch(Exception ex)
            {
                Trace.TraceError("TCPLink:{0} Close fail, ex:{1}-{2}", this.Desp, ex.Message, ex.StackTrace);
            }
        }
 
        /// <summary>
        /// 销毁
        /// </summary>
        public override void Fnit()
        {
            this.Close();
        }
 
        /// <summary>
        /// 接收数据
        /// </summary>
        /// <returns></returns>
        public override int Recv(byte[] rcvBuf, int bufLen)
        {
            int len = -1;
            try
            {
                len = netStream.Read(rcvBuf, 0, bufLen);
            }
            catch(Exception ex)
            {
                this.IsRemoteDisconn = true;
 
                Trace.TraceError("TCPLink:{0} Recv fail, ex:{1}-{2}", this.Desp, ex.Message, ex.StackTrace);
            }
 
            return len;
        }
 
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="sndBuf"></param>
        /// <param name="bufLen"></param>
        public override bool Send(byte[] sndBuf, int offset, int len)
        {
            try
            {
                netStream.Write(sndBuf, offset, len);
 
                return true;
            }
            catch(Exception ex)
            {
                this.IsRemoteDisconn = true;
 
                Trace.TraceError("TCPLink:{0} Send fail, ex:{1}-{2}", this.Desp, ex.Message, ex.StackTrace);
            }
 
            return false;
        }
    }
}