123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- using HPSocketCS;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using HRT_Measure;
- namespace HRT_Measure
- {
- public class ServerHelp
- {
- public ServerHelp(string ip, ushort port, string name)
- {
- IP = ip;
- Port = port;
- Name = name;
- LoadServer();
- }
- public TcpServer server = new HPSocketCS.TcpServer();
- public IntPtr serverID;
- public string IP;
- public ushort Port;
- public string Name;
- public byte[] buffer = new byte[2048];
-
-
- public string strRecv;
- public bool isServerConnected = false;
- public void LoadServer()
- {
- try
- {
- isServerConnected = false;
- //绑定事件
- //绑定监听地址前触发
- server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(Server_OnPrepareListen);
- //客户端连接请求被接受后触发
- server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(Server_OnAccept);
- //发送消息后触发
- server.OnSend += new TcpServerEvent.OnSendEventHandler(Server_OnSend);
- //收到消息后触发
- server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(Server_OnReceive);
- //连接关闭后触发(服务端的连接通常是多个,只要某一个连接关闭了都会触发)
- server.OnClose += new TcpServerEvent.OnCloseEventHandler(Server_OnClose);
- //组件停止后触发
- server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(Server_OnShutdown);
- server.IpAddress = IP;
- server.Port = Port;
- server.Start();
- strRecv = "";
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.ToString());
- }
- }
-
- public void Close()
- {
- try
- {
- server.Disconnect(serverID);
- }
- catch (Exception)
- {
- }
- }
- #region 事件
- private HandleResult Server_OnShutdown()
- {
- //ClsSanheHelp.Instance.SaveMsg("System", $"服务器【 {strIP} :{iPort} 】停止监听……", true);
- ProgramHelp.Instance.SaveMsg("Server", $"服务器【 {IP} :{Port} 】停止监听……", true);
- isServerConnected = false;
- return HandleResult.Ok;
- }
- private HandleResult Server_OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
- {
- string strIP = "";
- ushort port = 0;
- server.GetRemoteAddress(connId, ref strIP, ref port);
- if (errorCode == 0)
- {
- ProgramHelp.Instance.SaveMsg("Server", $"连接已断开,连接ID:{connId}", true);
- }
- else
- {
- ProgramHelp.Instance.SaveMsg("Server", $"客户端连接发生异常,已经断开连接,连接ID:{connId},错误代码:{errorCode}", true);
- }
- isServerConnected = false;
- return HandleResult.Ok;
- }
- private HandleResult Server_OnReceive(IntPtr connId, byte[] bytes)
- {
- try
- {
- string strRecv = Encoding.Default.GetString(bytes); //可以指定取开始到多少的字符 s = Encoding.Default.GetString(buffer, 0, 2);
- this.strRecv = strRecv.Replace("\r", "").Replace("\n", "");
- ProgramHelp.Instance.SaveMsg("Server", $"服务器{IP}收到 回馈数据 {strRecv}", true);
- }
- catch (Exception ex)
- {
- MessageBox.Show($"{IP}服务器接收异常:" + ex.Message);
- return HandleResult.Error;
- }
- return HandleResult.Ok;
- }
- private HandleResult Server_OnSend(IntPtr connId, byte[] bytes)
- {
- string sendedStr = Encoding.Default.GetString(bytes);
- ProgramHelp.Instance.SaveMsg("Server", $"向连接ID:{connId} 的客户端发送信息成功,内容:{sendedStr},长度:{bytes.Length}", true);
- return HandleResult.Ok;
- }
- private HandleResult Server_OnAccept(IntPtr connId, IntPtr pClient)
- {
- string strIP = "";
- ushort port = 0;
- server.GetRemoteAddress(connId, ref strIP, ref port);
- serverID = connId;
- ProgramHelp.Instance.SaveMsg("Server", $"收到客户端连接请求------>IP:【{strIP}:{port}】,连接ID:【{connId}】,与服务器建立连接!", true);
- isServerConnected = true;
- return HandleResult.Ok;
- }
- private HandleResult Server_OnPrepareListen(IntPtr soListen)
- {
- //ClsSanheHelp.Instance.SaveMsg("System", $"服务器【{strIP}:{iPort} 】开始监听……", true);
- ProgramHelp.Instance.SaveMsg("Server", $"服务器【{IP}:{Port} 】开始监听……", true);
- return HandleResult.Ok;
- }
- #endregion
- public void Send(string strMessage)
- {
- strMessage += "\r";
- try
- {
- strRecv = "";
- byte[] sendBytes = Encoding.Default.GetBytes(strMessage);
- server.Send(serverID, sendBytes, sendBytes.Length);
- }
- catch (Exception)
- {
- }
- }
- public string Receive()
- {
- return strRecv;
- }
- }
- }
|