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