using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
namespace HDL_ON.DriverLayer
{
public class Control_TcpClient
{
///
/// 通讯ID
///
public const int msg_id = 1;
//声明IP,端口,和一个用来连接的Socket
public string _ip;
private TcpClient _tcpClient;
//创建一个委托,用来满足其他类调用
//public delegate void DelegateMessage(string str);
public Action ReceiveEvent;
///
/// 构造函数
///
public Control_TcpClient(string serverIp)
{
_ip = serverIp;
}
//TCP连接
public bool Connect(int _port = 8586)
{
if (string.IsNullOrEmpty(_ip) || _port == 0)
{
return false;
}
_tcpClient = new TcpClient();
try
{
_tcpClient.Connect(IPAddress.Parse(_ip), _port);
Task.Run(new Action(ReceiveMessage));//开启线程,不停接收消息
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
return true;//返回连接状态
}
///
/// 关闭连接
///
///
public bool Close()
{
if (_tcpClient == null)
return true;
_tcpClient.Close();
_tcpClient = null;
return true;
}
///
/// 发送消息
///
/// 需要发送的字节
public void SendMessage(byte[] bytes)
{
NetworkStream networkStream = _tcpClient.GetStream();
networkStream.Write(bytes, 0, bytes.Length);
}
///
/// 获取列表数据回调方法
///
public Action GetListResponseAction;
//接收消息
public void ReceiveMessage()
{
NetworkStream networkStream = _tcpClient.GetStream();
while (true)
{
// 定义一个2M的缓存区;
byte[] arrMsgRec = new byte[1024 * 1024 * 2];
int size = networkStream.Read(arrMsgRec, 0, arrMsgRec.Length);
var tcpDataString = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, arrMsgRec.Length);
if (!string.IsNullOrEmpty(tcpDataString))
{
ReceiveEvent?.Invoke(tcpDataString);
}
//// 将接受到的数据存入到输入 arrMsgRec中;
//int length = -1;
//try
//{
// length = socketClient.Receive(arrMsgRec); // 接收数据,并返回数据的长度;
//}
//catch (Exception ex)
//{
// MainPage.Log($"tcpListener error 1 : {ex.Message}");
// Flag_Receive = false;
// // 从通信线程集合中删除被中断连接的通信线程对象;
// string keystr = socketClient.RemoteEndPoint.ToString();
// dic_ClientSocket.Remove(keystr);//删除客户端字典中该socket
// dic_ClientThread[keystr].Abort();//关闭线程
// dic_ClientThread.Remove(keystr);//删除字典中该线程
// tcpClient = null;
// socketClient = null;
// break;
//}
//byte[] buf = new byte[length];
//Array.Copy(arrMsgRec, buf, length);
//lock (tcpClient.m_Buffer)
//{
// var tcpDataString = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length);
// if (!string.IsNullOrEmpty(tcpDataString))
// {
// ReceiveEvent?.Invoke(tcpDataString);
// }
// MainPage.Log($"接收服务端数据:{tcpDataString}");
//}
}
}
#region A协议
///
/// 发送A协议数据
///
///
public void SendData(string topic)
{
string topicString = "Topic:" + topic + "/r/n";
string lenghtString = "Length:" + "/r/n" + "/r/n";
}
#endregion
}
}