123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- using HPSocketCS;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace HRT_Measure
- {
- public class ClientHelp
- {
- public HPSocketCS.TcpClient tcpClient = new HPSocketCS.TcpClient();
- public string IP;
- public ushort Port;
- public string Name;
-
- public bool isClientConnected = false;
- public string strClientRecv = "";
- public Thread thClientMonitor;
- public ClientHelp(string ip,ushort port,string name)
- {
- IP = ip;
- Port = port;
- Name = name;
- LoadClient();
- }
- public void LoadClient()
- {
- tcpClient.OnPrepareConnect += new TcpClientEvent.OnPrepareConnectEventHandler(Client_OnPrepareConnect);
- tcpClient.OnConnect += new TcpClientEvent.OnConnectEventHandler(Client_OnConnect);
- tcpClient.OnReceive += new TcpClientEvent.OnReceiveEventHandler(Client_OnReceive);
- tcpClient.OnSend += new TcpClientEvent.OnSendEventHandler(Client_OnSend);
- tcpClient.OnClose += new TcpClientEvent.OnCloseEventHandler(Client_OnClose);
-
- if (TcpClientStart()) { ProgramHelp.Instance.SaveMsg("Client", $"Client:{Name} {IP}:{Port}连接成功", true); }
- else { ProgramHelp.Instance.SaveMsg("Client", $"Client{Name} {IP}:{Port}连接失败", true); }
- thClientMonitor = new Thread(new ThreadStart(ThClientMonitor));
- thClientMonitor.IsBackground = true;
- thClientMonitor.Start();
- }
- private void ThClientMonitor()
- {
- while (true)
- {
- try
- {
- if (!isClientConnected)
- {
- TcpClientStart();
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show($"Client{Name} {IP}:{Port}重连错误:" + ex.Message);
- }
- Thread.Sleep(3000);
- }
- }
- public void DestroyRbtClient()
- {
- try
- {
- tcpClient.Destroy();
- }
- catch
- {
- }
- }
- #region RBT1
- public bool TcpClientStart()
- {
- try
- {
- //tcpClient.State = ServiceState.Started;
- if (tcpClient.Connect(IP, Port))
- {
- // tcpClient.State
- //isClientConnected = true;
- return true;
- }
- else
- {
- isClientConnected = false;
- return false;
- }
- }
- catch (Exception ex)
- {
- isClientConnected = false;
- MessageBox.Show($"Client{Name} {IP}:{Port}连接错误:" + ex.Message);
- return false;
- }
- }
- public void TcpClientSend(string s) //发送字符串
- {
- try
- {
- strClientRecv = "";
- string strSend = s.Trim() + "\r\n";
- byte[] buffer = System.Text.Encoding.Default.GetBytes(strSend);//byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
- tcpClient.Send(buffer, buffer.Length);//RbtsocketSend.Send(buffer);
- ProgramHelp.Instance.SaveMsg("Client", $"Client {Name} 发送 {s}", true);
- }
- catch (Exception ex) { MessageBox.Show("异常:" + ex.Message); }
- }
- private HandleResult Client_OnClose(TcpClient sender, SocketOperation enOperation, int errorCode)
- {
- isClientConnected = false;
- return HandleResult.Ok;
- }
- private HandleResult Client_OnSend(TcpClient sender, byte[] bytes)
- {
- return HandleResult.Ok;
- }
- private HandleResult Client_OnReceive(TcpClient sender, byte[] bytes)
- {
- try
- {
- string strRecv = Encoding.Default.GetString(bytes); //可以指定取开始到多少的字符 s = Encoding.Default.GetString(buffer, 0, 2);
- //ClsMy_Main.Instance.newMyLog.LogWhite("收到机械手回馈" + ":" + strRecv);//RbtsocketSend.RemoteEndPoint +//string[] split_s = s.Split(new Char[] { ',' });
- strRecv = strRecv.Replace("\n", "").Replace("\r", "");
- strClientRecv = strRecv;
- ProgramHelp.Instance.SaveMsg("Client", $"Client {Name}收到数据 {strRecv}", true);
- }
- catch (Exception ex)
- {
- MessageBox.Show($"Client {Name}接收异常:" + ex.Message);
- return HandleResult.Error;
- }
- return HandleResult.Ok;
- }
- private HandleResult Client_OnConnect(TcpClient sender)
- {
- isClientConnected = true;
-
- return HandleResult.Ok;
- }
- private static HandleResult Client_OnPrepareConnect(TcpClient sender, IntPtr socket)
- {
- return HandleResult.Ok;
- }
- #endregion
- }
- }
|