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 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; } // 清空缓冲区 防止收到之前的数据 } }