You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
5.2 KiB
147 lines
5.2 KiB
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
|
|
namespace UdpTestApp;
|
|
|
|
public class Program
|
|
{
|
|
private static StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
|
|
private static bool _continue;
|
|
private static Thread readThread;
|
|
private static UdpClient udpClient = null, receivingUdpClient = null;
|
|
|
|
public static bool applicationQuitRequested { get; private set; }
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
while (applicationQuitRequested == false)
|
|
{
|
|
Console.WriteLine($"----- USB HID PROTOCOL TEST APP -----");
|
|
Console.WriteLine($"Command list:");
|
|
Console.WriteLine($"s = start");
|
|
Console.WriteLine($"q = quit");
|
|
|
|
var key = Console.ReadKey();
|
|
|
|
switch (key.Key)
|
|
{
|
|
// start
|
|
case ConsoleKey.S:
|
|
Console.Write($"Write hostname: ");
|
|
string? hostname = Console.ReadLine();
|
|
|
|
if (hostname == null ||
|
|
String.IsNullOrEmpty(hostname))
|
|
{
|
|
Console.WriteLine($"Invalid hostname entered.");
|
|
break;
|
|
}
|
|
|
|
Console.Write($"Write port number: ");
|
|
string? portString = Console.ReadLine();
|
|
int port;
|
|
|
|
if (portString == null ||
|
|
portString == "" ||
|
|
Int32.TryParse(portString, out port) == false)
|
|
{
|
|
Console.WriteLine($"Invalid port entered.");
|
|
break;
|
|
}
|
|
|
|
try
|
|
{
|
|
udpClient = new UdpClient();
|
|
receivingUdpClient = new UdpClient(11001);
|
|
udpClient.Connect(hostname, port);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Could not create UDP client. \n {ex}");
|
|
break;
|
|
}
|
|
|
|
_continue = true;
|
|
readThread = new Thread(Read);
|
|
readThread.Start();
|
|
|
|
Console.WriteLine("Connected to device. Write 'quit' to end communication.");
|
|
|
|
while (_continue)
|
|
{
|
|
var message = Console.ReadLine();
|
|
|
|
if (stringComparer.Equals("quit", message))
|
|
{
|
|
_continue = false;
|
|
}
|
|
else if (message != null && String.IsNullOrEmpty(message) == false)
|
|
{
|
|
try
|
|
{
|
|
byte[] msgBytes = Encoding.ASCII.GetBytes(message);
|
|
List<byte> listBytes = new List<byte>();
|
|
listBytes.AddRange(msgBytes);
|
|
listBytes.Add((byte)'\n');
|
|
var array = listBytes.ToArray();
|
|
udpClient.Send(array, array.Length);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
Console.WriteLine("Message could not be sent.");
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
readThread.Join(TimeSpan.FromSeconds(2));
|
|
//readThread.Abort();
|
|
readThread = null;
|
|
receivingUdpClient.Close();
|
|
receivingUdpClient = null;
|
|
udpClient.Close();
|
|
udpClient = null;
|
|
Console.WriteLine("Closed connection.");
|
|
|
|
|
|
break;
|
|
|
|
// quit
|
|
case ConsoleKey.Q:
|
|
applicationQuitRequested = true;
|
|
break;
|
|
|
|
default:
|
|
Console.WriteLine($"{Environment.NewLine}Did not recognize key.. {Environment.NewLine}");
|
|
break;
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public static void Read()
|
|
{
|
|
while (_continue)
|
|
{
|
|
try
|
|
{
|
|
//IPEndPoint object will allow us to read datagrams sent from any source.
|
|
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
|
|
|
|
// Blocks until a message returns on this socket from a remote host.
|
|
Byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
|
|
string returnData = Encoding.ASCII.GetString(receiveBytes);
|
|
|
|
// Uses the IPEndPoint object to determine which of these two hosts responded.
|
|
Console.WriteLine("Message received: " + returnData.ToString());
|
|
Console.WriteLine("Was sent from " +
|
|
RemoteIpEndPoint.Address.ToString() +
|
|
" on their port number " +
|
|
RemoteIpEndPoint.Port.ToString());
|
|
}
|
|
catch { }
|
|
}
|
|
}
|
|
} |