using System;
|
using System.Net;
|
using System.Net.Sockets;
|
using System.Threading.Tasks;
|
|
namespace HDL_ON.DriverLayer
|
{
|
public class Control_TcpClient
|
{
|
|
//声明IP,端口,和一个用来连接的Socket
|
public string _ip;
|
|
private TcpClient _tcpClient;
|
|
//创建一个委托,用来满足其他类调用
|
//public delegate void DelegateMessage(string str);
|
public Action<string> ReceiveEvent;
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
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));//开启线程,不停接收消息
|
MainPage.Log($"打开tcp client{_ip}:{_port}");
|
}
|
catch (Exception e)
|
{
|
MainPage.Log(e.Message);
|
throw;
|
}
|
return true;//返回连接状态
|
}
|
/// <summary>
|
/// 关闭连接
|
/// </summary>
|
/// <returns></returns>
|
public bool Close()
|
{
|
if (_tcpClient == null)
|
return true;
|
_tcpClient.Close();
|
_tcpClient = null;
|
return true;
|
}
|
|
/// <summary>
|
/// 发送消息
|
/// </summary>
|
/// <param name="bytes">需要发送的字节</param>
|
public void SendMessage(byte[] bytes)
|
{
|
NetworkStream networkStream = _tcpClient.GetStream();
|
if (networkStream.CanWrite)
|
{
|
networkStream.Write(bytes, 0, bytes.Length);
|
}
|
//networkStream.Close();
|
}
|
|
/// <summary>
|
/// 获取列表数据回调方法
|
/// </summary>
|
public Action<string> 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}");
|
//}
|
|
}
|
}
|
|
|
}
|
}
|