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; } } }