schangxiang@126.com
2025-09-29 682eba0aaf922e69dfafe05fb6c1bbdbf3a0e04a
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using HPSocketCS;
using iWareCcTest.Properties;
using iWareCommon.Utils;
using System;
namespace iWareCc.Util
{
    /// <summary>
    /// Socket帮助抽象类,该类实现Socket的连接,关闭基本功能
    /// </summary>
    public abstract class SocketServer
    {
 
        public TcpServer Server;//socket连接服务端
        private string Ip;//需要连接的服务器IP
        private ushort Port;//需要连接的服务器端口
        /// <summary>
        /// 记录socket是否开启
        /// </summary>
        public bool IsServerStarted = false;
 
        /// <summary>
        /// 记录客户端是否连上
        /// </summary>
        public bool IsClientOn = false;
 
 
        public SocketServer(TcpServer server, string ip, string port)
        {
            this.Server = server;
            this.Ip = ip;
            this.Port = ushort.Parse(port);
 
            //绑定事件
            //绑定监听地址前触发
            Server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(OnPrepareListen);
            //客户端连接请求被接受后触发
            Server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(OnAccept);
            //发送消息后触发
            Server.OnSend += new TcpServerEvent.OnSendEventHandler(OnSend);
            //收到消息后触发
            Server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(OnReceive);
            //连接关闭后触发(服务端的连接通常是多个,只要某一个连接关闭了都会触发)
            Server.OnClose += new TcpServerEvent.OnCloseEventHandler(OnClose);
            //组件停止后触发
            Server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(OnShutdown);
        }
 
        /// <summary>
        /// 开启socket服务
        /// </summary>
        /// <returns>是否连接成功</returns>
        public bool ServerStart()
        {
            Server.IpAddress = Ip;
            Server.Port = Port;
            return Server.Start();
        }
 
 
        /// <summary>
        /// 关闭socket连接
        /// </summary>
        /// <returns>是否断开成功</returns>
        public bool Close()
        {
            return Server.Stop();
        }
 
        /// <summary>
        /// 发送
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public bool Send(IntPtr clientId, byte[] bytes)
        {
            return Server.Send(clientId, bytes, bytes.Length);
        }
 
        /// <summary>
        /// 获取IP
        /// </summary>
        /// <returns></returns>
        public string GetIp()
        {
            return Ip;
        }
 
        /// <summary>
        /// 获取端口
        /// </summary>
        /// <returns></returns>
        public string GetPort()
        {
            return Port.ToString();
        }
 
        /// <summary>
        /// 有Client连接上
        /// </summary>
        /// <param name="connId"></param>
        /// <param name="pClient"></param>
        /// <returns></returns>
        protected abstract HandleResult OnAccept(IntPtr connId, IntPtr pClient);
 
        /// <summary>
        /// 发送信息时执行
        /// </summary>
        /// <param name="connId"></param>
        /// <param name="bytes"></param>
        /// <returns></returns>
        protected abstract HandleResult OnSend(IntPtr connId, byte[] bytes);
 
 
        /// <summary>
        /// 服务器接收到信息
        /// </summary>
        /// <param name="connId"></param>
        /// <param name="bytes"></param>
        /// <returns></returns>
        protected abstract HandleResult OnReceive(IntPtr connId, byte[] bytes);
 
 
        /// <summary>
        /// Server关闭时执行
        /// </summary>
        /// <param name="connId"></param>
        /// <param name="enOperation"></param>
        /// <param name="errorCode"></param>
        /// <returns></returns>
        protected abstract HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode);
 
        /// <summary>
        /// 服务关闭
        /// </summary>
        /// <returns></returns>
        protected abstract HandleResult OnShutdown();
 
 
        /// <summary>
        /// 服务监听
        /// </summary>
        /// <param name="soListen"></param>
        /// <returns></returns>
        protected abstract HandleResult OnPrepareListen(IntPtr soListen);
    }
}