work
This commit is contained in:
parent
c633df4ff3
commit
0250037f11
Binary file not shown.
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NLog;
|
using NLog;
|
||||||
@ -13,44 +14,51 @@ namespace DataClient
|
|||||||
private Logger log = LogManager.GetCurrentClassLogger();
|
private Logger log = LogManager.GetCurrentClassLogger();
|
||||||
private Encoding enc;
|
private Encoding enc;
|
||||||
private string ip = "127.0.0.1";
|
private string ip = "127.0.0.1";
|
||||||
|
/// <summary>IP адрес СТП.</summary>
|
||||||
public string Ip
|
public string Ip
|
||||||
{
|
{
|
||||||
get { return ip; }
|
get { return ip; }
|
||||||
set
|
set { ip = (IPAddress.TryParse(value, out _)) ? value : ip; }
|
||||||
{
|
|
||||||
if (!IPAddress.TryParse(value, out _))
|
|
||||||
throw new Exception("Wrong ip address.");
|
|
||||||
else
|
|
||||||
ip = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
private int port = 1070;
|
private int port = 1070;
|
||||||
|
/// <summary>Порт СТП.</summary>
|
||||||
public int Port
|
public int Port
|
||||||
{
|
{
|
||||||
get { return port; }
|
get { return port; }
|
||||||
set
|
set { port = (value < 1) ? 1 : (value > 65535) ? 65535 : value; }
|
||||||
{
|
|
||||||
if (value < 1 && value > 65535)
|
|
||||||
throw new Exception("Wrong port.");
|
|
||||||
else
|
|
||||||
port = value;
|
|
||||||
}
|
}
|
||||||
}
|
private int retryCount = 3;
|
||||||
|
/// <summary>Количество попыток переподключения.</summary>
|
||||||
private enum Code : uint
|
public int RetryCount
|
||||||
{
|
{
|
||||||
check_command = 4294967295,
|
get { return retryCount; }
|
||||||
|
set { retryCount = value < 1 ? 1 : value; }
|
||||||
|
}
|
||||||
|
private int retryInterval = 1;
|
||||||
|
/// <summary>Время в секундах между попытками переподключения.</summary>
|
||||||
|
public int RetryInterval
|
||||||
|
{
|
||||||
|
get { return retryInterval; }
|
||||||
|
set { retryInterval = (value < 1) ? 1 : value; }
|
||||||
|
}
|
||||||
|
private TcpClient tcpC = null;
|
||||||
|
/// <summary>Коды для работы с СТП.</summary>
|
||||||
|
public enum Code : uint
|
||||||
|
{
|
||||||
|
check_command = uint.MaxValue,
|
||||||
version = 0,
|
version = 0,
|
||||||
pasp_download = 4,
|
pasp_download = 4,
|
||||||
download_nh = 21,
|
download_nh = 21,
|
||||||
dir_browse = 23,
|
dir_browse = 23,
|
||||||
user_flags = 26
|
user_flags = 26
|
||||||
}
|
}
|
||||||
|
|
||||||
//Construction
|
//Construction
|
||||||
public NETClient()
|
public NETClient()
|
||||||
{
|
{
|
||||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||||
enc = Encoding.GetEncoding(866);
|
enc = Encoding.GetEncoding(866);
|
||||||
|
tcpC = new TcpClient(new IPEndPoint(IPAddress.Parse(ip), port));
|
||||||
}
|
}
|
||||||
public NETClient(string ip, int port)
|
public NETClient(string ip, int port)
|
||||||
{
|
{
|
||||||
@ -58,21 +66,158 @@ namespace DataClient
|
|||||||
enc = Encoding.GetEncoding(866);
|
enc = Encoding.GetEncoding(866);
|
||||||
Ip = ip;
|
Ip = ip;
|
||||||
Port = port;
|
Port = port;
|
||||||
|
tcpC = new TcpClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Work with socket functions
|
//Work with socket functions
|
||||||
public byte[] CreateCode(uint code, byte[] prefix = null, string val = null, byte[] postfix = null)
|
/// <summary>Получить неизвестное количество байт.</summary>
|
||||||
|
/// <param name="socket">Открытый сетевой поток.</param>
|
||||||
|
/// <returns>Массив байт.</returns>
|
||||||
|
private byte[] ReceiveBytesUnknown(NetworkStream ns, int awaitInterval = 1, int tryCounts = 3)
|
||||||
{
|
{
|
||||||
|
tryCounts = (tryCounts < 1) ? 1 : tryCounts;
|
||||||
|
awaitInterval = (awaitInterval < 1) ? 1 : awaitInterval;
|
||||||
var res = new List<byte>();
|
var res = new List<byte>();
|
||||||
|
if (!ns.CanRead) throw new Exception("NetworkStream not access to Read.");
|
||||||
|
if (!ns.Socket.Connected) throw new Exception("NetworkStream not connected to server.");
|
||||||
|
|
||||||
|
int tryCount = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (!ns.Socket.Connected) throw new Exception("Server drop connection.");
|
||||||
|
if (!ns.DataAvailable)
|
||||||
|
{
|
||||||
|
tryCount++;
|
||||||
|
Task.Delay(awaitInterval * 1000).Wait();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
tryCount = 0;
|
||||||
|
var buf = new byte[1024];
|
||||||
|
var length = ns.Read(buf, 0, buf.Length);
|
||||||
|
for (var i = 0; i < length; i++) res.Add(buf[i]);
|
||||||
|
} while (tryCount < tryCounts);
|
||||||
return res.ToArray();
|
return res.ToArray();
|
||||||
}
|
}
|
||||||
|
/// <summary>Получить определенное количество байт.</summary>
|
||||||
|
/// <param name="ns">Открытый сетевой поток.</param>
|
||||||
|
/// <param name="size">Кол-во получаемый байт.</param>
|
||||||
|
/// <returns>Массив байт, равный заданному кол-ву.</returns>
|
||||||
|
private byte[] ReceiveBytesFixSize(NetworkStream ns, int size, int awaitInterval = 1, int tryCounts = 3)
|
||||||
|
{
|
||||||
|
tryCounts = (tryCounts < 1) ? 1 : tryCounts;
|
||||||
|
awaitInterval = (awaitInterval < 1) ? 1 : awaitInterval;
|
||||||
|
if (size <= 0) throw new Exception("Size can't be less or zero.");
|
||||||
|
if (!ns.CanRead) throw new Exception("NetworkStream not access to Read.");
|
||||||
|
if (!ns.Socket.Connected) throw new Exception("NetworkStream not connected to server.");
|
||||||
|
var res = new byte[size];
|
||||||
|
var countSize = 0;
|
||||||
|
|
||||||
|
int tryCount = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (!ns.Socket.Connected) throw new Exception("Server drop connection.");
|
||||||
|
if (!ns.DataAvailable)
|
||||||
|
{
|
||||||
|
tryCount++;
|
||||||
|
Task.Delay(awaitInterval * 1000).Wait();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
tryCount = 0;
|
||||||
|
var buf = new byte[size - countSize];
|
||||||
|
var length = ns.Read(buf, 0, buf.Length);
|
||||||
|
for (var i = 0; i < length; i++) res[countSize++] = buf[i];
|
||||||
|
if (countSize == size)
|
||||||
|
return res;
|
||||||
|
} while (tryCount < tryCounts);
|
||||||
|
throw new Exception("Can't get all bytes.");
|
||||||
|
}
|
||||||
|
|
||||||
//Support functions
|
//Support functions
|
||||||
|
/// <summary>Формирование массива байт на отправку.</summary>
|
||||||
|
/// <param name="code">Код комманды. Конвертируется в 4 байта. (0x00 0x00 0x00 0x00)</param>
|
||||||
|
/// <param name="prefix">Байты перед передаваемой строкой.</param>
|
||||||
|
/// <param name="val">Передаваемая строка.</param>
|
||||||
|
/// <param name="postfix">Байты после передаваемой строкой.</param>
|
||||||
|
/// <returns>Массив байт для отправки на СТП.</returns>
|
||||||
|
public byte[] CreateCode(uint code, byte[] prefix = null, string val = null, byte[] postfix = null)
|
||||||
|
{
|
||||||
|
var res = new List<byte>();
|
||||||
|
res.AddRange(BitConverter.GetBytes(code));
|
||||||
|
if (prefix != null)
|
||||||
|
res.AddRange(prefix);
|
||||||
|
if(val != null)
|
||||||
|
{
|
||||||
|
res.AddRange(BitConverter.GetBytes((uint)val.Length));
|
||||||
|
res.AddRange(enc.GetBytes(val));
|
||||||
|
res.Add(0x00);
|
||||||
|
}
|
||||||
|
if (postfix != null)
|
||||||
|
res.AddRange(postfix);
|
||||||
|
return res.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
//Main functions
|
//Main functions
|
||||||
|
/// <summary>Открыть подключение.</summary>
|
||||||
|
/// <returns>Результат выполнения функции.</returns>
|
||||||
|
public bool Connect()
|
||||||
|
{
|
||||||
|
if (Connected()) return true;
|
||||||
|
if (tcpC == null) tcpC = new TcpClient();
|
||||||
|
try { tcpC.Connect(new IPEndPoint(IPAddress.Parse(ip), port)); }
|
||||||
|
catch { return false; }
|
||||||
|
return Connected();
|
||||||
|
}
|
||||||
|
/// <summary>Проверка подключения.</summary>
|
||||||
|
/// <returns>Возвращает состояние подключения.</returns>
|
||||||
|
public bool Connected()
|
||||||
|
{
|
||||||
|
return (tcpC != null && tcpC.Connected);
|
||||||
|
}
|
||||||
|
/// <summary>Закрыть подключение.</summary>
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
if (tcpC != null && !tcpC.Connected)
|
||||||
|
tcpC.Close();
|
||||||
|
}
|
||||||
|
/// <summary>Отправка массива байт на СТП.</summary>
|
||||||
|
/// <param name="send">Массив байт для отправки.</param>
|
||||||
|
public void SendBytes(byte[] send)
|
||||||
|
{
|
||||||
|
if (!Connected()) throw new Exception("Connection not exist.");
|
||||||
|
var ns = tcpC.GetStream();
|
||||||
|
if (!ns.CanWrite) throw new Exception("NetworkStream not access to Write.");
|
||||||
|
if (!ns.Socket.Connected) throw new Exception("NetworkStream not connected to server.");
|
||||||
|
ns.Write(send, 0, send.Length);
|
||||||
|
}
|
||||||
|
public byte[] ReceiveBytes()
|
||||||
|
{
|
||||||
|
var res = new List<byte>();
|
||||||
|
if (!Connected()) throw new Exception("Connection not exist.");
|
||||||
|
var ns = tcpC.GetStream();
|
||||||
|
res.AddRange(ReceiveBytesUnknown(ns));
|
||||||
|
return res.ToArray();
|
||||||
|
}
|
||||||
|
public byte[] ReceiveBytes(int size)
|
||||||
|
{
|
||||||
|
var res = new List<byte>();
|
||||||
|
if (!Connected()) throw new Exception("Connection not exist.");
|
||||||
|
var ns = tcpC.GetStream();
|
||||||
|
res.AddRange(ReceiveBytesFixSize(ns, size));
|
||||||
|
return res.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Получение файла данных (байтами) с СТП.</summary>
|
||||||
|
/// <param name="date">Дата. Из неё формируется строка в формате YYYMMDD</param>
|
||||||
|
/// <param name="vdp">Номер печи. 00 - общецеховые параметры.</param>
|
||||||
|
/// <param name="idx">Индекс файла. От 0 до 15.</param>
|
||||||
|
/// <returns>Обработанный массив байт.</returns>
|
||||||
|
public byte[] GetFile(DateTime date, int vdp, int idx)
|
||||||
|
{
|
||||||
|
if (!Connected()) throw new Exception("Connection not exist.");
|
||||||
|
var res = new List<byte>();
|
||||||
|
var str = date.ToString("yyyyMMdd") + vdp.ToString("D2") + (idx % 16).ToString("X1");
|
||||||
|
|
||||||
|
return res.ToArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ namespace DataClients
|
|||||||
{
|
{
|
||||||
public class NetClient
|
public class NetClient
|
||||||
{
|
{
|
||||||
private string ServerStr = "10.10.45.152";
|
private string ServerStr = "10.10.45.151";
|
||||||
private int PortStr = 1070;
|
private int PortStr = 1070;
|
||||||
private IPEndPoint IpPoint;
|
private IPEndPoint IpPoint;
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -369,8 +369,8 @@ namespace Tests
|
|||||||
static void test14()
|
static void test14()
|
||||||
{
|
{
|
||||||
var total = new List<(ushort, Protect)>();
|
var total = new List<(ushort, Protect)>();
|
||||||
var ts = new DateTime(2021, 05, 17);
|
var ts = new DateTime(2021, 05, 28);
|
||||||
var te = new DateTime(2021, 05, 28);
|
var te = new DateTime(2021, 06, 02);
|
||||||
var a = new STPClient();
|
var a = new STPClient();
|
||||||
var vdp = new ushort[] { 3, 4, 5, 6, 8, 10, 17, 18, 33, 39, 40, 43, 44 };
|
var vdp = new ushort[] { 3, 4, 5, 6, 8, 10, 17, 18, 33, 39, 40, 43, 44 };
|
||||||
foreach(var v in vdp)
|
foreach(var v in vdp)
|
||||||
|
@ -1,18 +1,10 @@
|
|||||||
2021-05-17 22:19:34.5 035 Отс. связь ГМП 01
|
2021-05-28 00:27:18.7 035 Отс. связь ГМП 01
|
||||||
2021-05-17 22:19:36.2 035 Отс. связь ГМП 00
|
2021-05-28 00:27:24.2 035 Отс. связь ГМП 00
|
||||||
2021-05-18 14:42:13.5 035 Отс. связь ГМП 01
|
2021-05-28 13:42:09.7 035 Отс. связь ГМП 01
|
||||||
2021-05-18 14:42:19.0 035 Отс. связь ГМП 00
|
2021-05-28 13:42:24.0 035 Отс. связь ГМП 00
|
||||||
2021-05-18 20:24:00.3 035 Отс. связь ГМП 01
|
2021-05-30 11:50:55.4 105 Отс. связь AB 01
|
||||||
2021-05-18 20:24:05.8 035 Отс. связь ГМП 00
|
2021-05-30 11:50:55.8 105 Отс. связь AB 00
|
||||||
2021-05-22 19:44:46.4 035 Отс. связь ГМП 01
|
2021-06-01 03:51:51.6 035 Отс. связь ГМП 01
|
||||||
2021-05-23 03:12:37.2 035 Отс. связь ГМП 00
|
2021-06-01 03:51:57.1 035 Отс. связь ГМП 00
|
||||||
2021-05-24 20:56:41.0 035 Отс. связь ГМП 01
|
2021-06-01 11:45:01.7 035 Отс. связь ГМП 01
|
||||||
2021-05-24 20:56:46.5 035 Отс. связь ГМП 00
|
2021-06-01 11:45:07.2 035 Отс. связь ГМП 00
|
||||||
2021-05-25 20:42:30.1 035 Отс. связь ГМП 01
|
|
||||||
2021-05-25 20:42:35.6 035 Отс. связь ГМП 00
|
|
||||||
2021-05-26 00:00:00.3 105 Отс. связь AB 01
|
|
||||||
2021-05-26 00:00:00.6 105 Отс. связь AB 00
|
|
||||||
2021-05-27 06:42:07.1 035 Отс. связь ГМП 01
|
|
||||||
2021-05-27 06:42:12.6 035 Отс. связь ГМП 00
|
|
||||||
2021-05-27 14:51:46.2 035 Отс. связь ГМП 01
|
|
||||||
2021-05-27 14:51:51.7 035 Отс. связь ГМП 00
|
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
2021-05-26 11:44:42.8 035 Отс. связь ГМП 01
|
|
||||||
2021-05-26 11:44:43.4 035 Отс. связь ГМП 00
|
|
@ -1,8 +1,8 @@
|
|||||||
2021-05-17 09:58:39.9 035 Отс. связь ГМП 01
|
2021-05-28 14:44:43.7 035 Отс. связь ГМП 01
|
||||||
2021-05-17 10:07:04.5 035 Отс. связь ГМП 00
|
2021-05-28 14:48:39.7 035 Отс. связь ГМП 00
|
||||||
2021-05-22 01:00:38.6 035 Отс. связь ГМП 01
|
2021-05-28 14:49:13.8 035 Отс. связь ГМП 01
|
||||||
2021-05-22 01:00:44.1 035 Отс. связь ГМП 00
|
2021-05-28 14:49:57.0 035 Отс. связь ГМП 00
|
||||||
2021-05-22 12:14:53.7 035 Отс. связь ГМП 01
|
2021-05-31 16:33:30.7 035 Отс. связь ГМП 01
|
||||||
2021-05-22 12:14:59.2 035 Отс. связь ГМП 00
|
2021-05-31 16:33:46.1 035 Отс. связь ГМП 00
|
||||||
2021-05-25 14:01:20.3 035 Отс. связь ГМП 01
|
2021-06-01 11:08:32.1 035 Отс. связь ГМП 01
|
||||||
2021-05-25 14:01:32.1 035 Отс. связь ГМП 00
|
2021-06-01 11:08:39.0 035 Отс. связь ГМП 00
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
2021-05-17 11:25:48.1 035 Отс. связь ГМП 01
|
|
||||||
2021-05-17 11:25:52.7 035 Отс. связь ГМП 00
|
|
@ -1,2 +0,0 @@
|
|||||||
2021-05-21 09:32:21.8 035 Отс. связь ГМП 01
|
|
||||||
2021-05-21 09:32:23.9 035 Отс. связь ГМП 00
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,32 +1,18 @@
|
|||||||
2021-05-17 09:58:39.9 035 Отс. связь ГМП 01 <- vdp10
|
2021-05-28 00:27:18.7 035 Отс. связь ГМП 01 <- vdp03
|
||||||
2021-05-17 10:07:04.5 035 Отс. связь ГМП 00 <- vdp10
|
2021-05-28 00:27:24.2 035 Отс. связь ГМП 00 <- vdp03
|
||||||
2021-05-17 11:25:48.1 035 Отс. связь ГМП 01 <- vdp17
|
2021-05-28 13:42:09.7 035 Отс. связь ГМП 01 <- vdp03
|
||||||
2021-05-17 11:25:52.7 035 Отс. связь ГМП 00 <- vdp17
|
2021-05-28 13:42:24.0 035 Отс. связь ГМП 00 <- vdp03
|
||||||
2021-05-17 22:19:34.5 035 Отс. связь ГМП 01 <- vdp03
|
2021-05-28 14:44:43.7 035 Отс. связь ГМП 01 <- vdp10
|
||||||
2021-05-17 22:19:36.2 035 Отс. связь ГМП 00 <- vdp03
|
2021-05-28 14:48:39.7 035 Отс. связь ГМП 00 <- vdp10
|
||||||
2021-05-18 14:42:13.5 035 Отс. связь ГМП 01 <- vdp03
|
2021-05-28 14:49:13.8 035 Отс. связь ГМП 01 <- vdp10
|
||||||
2021-05-18 14:42:19.0 035 Отс. связь ГМП 00 <- vdp03
|
2021-05-28 14:49:57.0 035 Отс. связь ГМП 00 <- vdp10
|
||||||
2021-05-18 20:24:00.3 035 Отс. связь ГМП 01 <- vdp03
|
2021-05-30 11:50:55.4 105 Отс. связь AB 01 <- vdp03
|
||||||
2021-05-18 20:24:05.8 035 Отс. связь ГМП 00 <- vdp03
|
2021-05-30 11:50:55.8 105 Отс. связь AB 00 <- vdp03
|
||||||
2021-05-21 09:32:21.8 035 Отс. связь ГМП 01 <- vdp33
|
2021-05-31 16:33:30.7 035 Отс. связь ГМП 01 <- vdp10
|
||||||
2021-05-21 09:32:23.9 035 Отс. связь ГМП 00 <- vdp33
|
2021-05-31 16:33:46.1 035 Отс. связь ГМП 00 <- vdp10
|
||||||
2021-05-22 01:00:38.6 035 Отс. связь ГМП 01 <- vdp10
|
2021-06-01 03:51:51.6 035 Отс. связь ГМП 01 <- vdp03
|
||||||
2021-05-22 01:00:44.1 035 Отс. связь ГМП 00 <- vdp10
|
2021-06-01 03:51:57.1 035 Отс. связь ГМП 00 <- vdp03
|
||||||
2021-05-22 12:14:53.7 035 Отс. связь ГМП 01 <- vdp10
|
2021-06-01 11:08:32.1 035 Отс. связь ГМП 01 <- vdp10
|
||||||
2021-05-22 12:14:59.2 035 Отс. связь ГМП 00 <- vdp10
|
2021-06-01 11:08:39.0 035 Отс. связь ГМП 00 <- vdp10
|
||||||
2021-05-22 19:44:46.4 035 Отс. связь ГМП 01 <- vdp03
|
2021-06-01 11:45:01.7 035 Отс. связь ГМП 01 <- vdp03
|
||||||
2021-05-23 03:12:37.2 035 Отс. связь ГМП 00 <- vdp03
|
2021-06-01 11:45:07.2 035 Отс. связь ГМП 00 <- vdp03
|
||||||
2021-05-24 20:56:41.0 035 Отс. связь ГМП 01 <- vdp03
|
|
||||||
2021-05-24 20:56:46.5 035 Отс. связь ГМП 00 <- vdp03
|
|
||||||
2021-05-25 14:01:20.3 035 Отс. связь ГМП 01 <- vdp10
|
|
||||||
2021-05-25 14:01:32.1 035 Отс. связь ГМП 00 <- vdp10
|
|
||||||
2021-05-25 20:42:30.1 035 Отс. связь ГМП 01 <- vdp03
|
|
||||||
2021-05-25 20:42:35.6 035 Отс. связь ГМП 00 <- vdp03
|
|
||||||
2021-05-26 00:00:00.3 105 Отс. связь AB 01 <- vdp03
|
|
||||||
2021-05-26 00:00:00.6 105 Отс. связь AB 00 <- vdp03
|
|
||||||
2021-05-26 11:44:42.8 035 Отс. связь ГМП 01 <- vdp04
|
|
||||||
2021-05-26 11:44:43.4 035 Отс. связь ГМП 00 <- vdp04
|
|
||||||
2021-05-27 06:42:07.1 035 Отс. связь ГМП 01 <- vdp03
|
|
||||||
2021-05-27 06:42:12.6 035 Отс. связь ГМП 00 <- vdp03
|
|
||||||
2021-05-27 14:51:46.2 035 Отс. связь ГМП 01 <- vdp03
|
|
||||||
2021-05-27 14:51:51.7 035 Отс. связь ГМП 00 <- vdp03
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user