Реализация передачи файлов через com-порт - C#
Формулировка задачи:
Здравствуйте, я только недавно начал изучать с#, мой скил соу лоу, так что для того чтобы сделать следующее задание мне нужна некоторая поддержка, надеюсь получить её здесь.
Итак, задача заключается в следующем, перебросить какие-то данные через ком-порт, к примеру, файл. Вот что я сумел нашкодить:
Решение задачи: «Реализация передачи файлов через com-порт»
textual
Листинг программы
//-----------------------------------
// Метод ассинхронного приёма данных
//-----------------------------------
protected override void OnDoWork(DoWorkEventArgs e)
{
Message("Поток приёма стартовал\n");
int readedBytesCount = 0; // счётчик считанных байтов
byte len = 0; // длина поля DATA
byte[] receiveBuffer = new byte[60]; // приёмный буфер
byte[] resultBuffer; // результирующий буфер
while (true)
{
readedBytesCount = 0;
if (CancellationPending)
{
e.Cancel = true;
break;
}
try
{
if (!com.IsOpen)
{
Message("Порт закрыт\n");
break;
}
lock (comLocker)
{
//stx
readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
if (readedBytesCount < 1)
{
Message("[err 0]\n");
continue;
}
if (receiveBuffer[0] != 0xB5)
{
Message("[err 1]\n");
continue;
}
//address
readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
//len
readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
len = receiveBuffer[2];
//cmd
readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
//data
readedBytesCount += com.Read(receiveBuffer, readedBytesCount, len);
//crc
readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
resultBuffer = new byte[readedBytesCount];
Array.Copy(receiveBuffer, resultBuffer, resultBuffer.Length);
Debugger.MessageDateTime("COM получил пакет, генерирует событие");
OnPackageReceived(this, new ObjectEventArgs(resultBuffer));
}
}
catch (TimeoutException err) { continue; }
catch (IOException err) { Message(err.Message); continue; }
Thread.Sleep(1);
}
}