2025-03-16 03:17:36 +08:00

49 lines
1.4 KiB
C#

using System.Net.Sockets;
using System.Text;
using NetTaste;
using Newtonsoft.Json.Linq;
namespace Seyounth.Hyosung.Core.Scanner;
public class HikScanner(string host, int port)
{
public string Host => host;
public int Port => port;
private Socket _socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public async Task ConnectAsync(CancellationToken token)
{
await _socket.ConnectAsync(Host, Port, token);
Console.WriteLine($"scanner[{Host}:{Port}] connected");
}
public async Task CloseAsync(CancellationToken token)
{
await _socket.DisconnectAsync(true, token);
_socket.Dispose();
}
public async Task<string> ScanAsync()
{
try
{
byte[] cmd = "start"u8.ToArray();
await _socket.SendAsync(cmd);
byte[] buffer = new byte[1024];
int len = await _socket.ReceiveAsync(buffer).WaitAsync(TimeSpan.FromMilliseconds(2000));
cmd = "stop"u8.ToArray();
await _socket.SendAsync(cmd);
byte[] _ = new byte[1024];
while (_socket.Available > 0)
{
await _socket.ReceiveAsync(_, SocketFlags.None);
}
return Encoding.ASCII.GetString(buffer, 0, len);
}
catch (Exception e)
{
return string.Empty;
}
// 清空缓冲区 防止收到之前的数据
}
}