.NET CORE Serial Class не читает данные за 4KBytes в BaseStream или ReadBuffer при публикации на машине Linux с использованием портов tty - PullRequest
1 голос
/ 12 ноября 2019

Я создал приложение .NET CORE 3.0 для передачи файлов через последовательный порт, которое отлично работает в Windows, но может читать только небольшие объемы данных в Linux. В основном я передаю данные с одного компьютера, а принимающий компьютер читает данные следующим образом:

        _serialPort.ReadBufferSize = 7000000;
...more setup code 

        Console.WriteLine("Serial receiver started at " + DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture) + " Collecting and decoding file data for 4 minute intervals. Please wait...");
        Console.WriteLine("Header search pattern: " + BitConverter.ToString(BitConverter.GetBytes(header)));
        int sleepTimeMiliseconds = (240000 - (int)stopwatch.Elapsed.TotalMilliseconds < 1) ? 0 : 240000 - (int)stopwatch.Elapsed.TotalMilliseconds;
        Thread.Sleep(sleepTimeMiliseconds); // wait for about 4 minutes for the data to come in.
        byte[] dataBuffer = new byte[_serialPort.ReadBufferSize];

        //read data then discard buffer to get new data from the transmitting machine
        if (!_serialPort.IsOpen) // serial port could close when operating system sleeps
            _serialPort.Open();
        _serialPort.Read(dataBuffer, 0, dataBuffer.Length);
        //HundredKBBuffer = Convert.FromBase64String(_serialPort.ReadExisting());
        _serialPort.DiscardInBuffer();
        stopwatch.Restart();
        Console.WriteLine("Data buffer size in bytes: " + dataBuffer.Length);
        DecodeFileData(dataBuffer, header, trailer);

Я также пытался использовать _serialPort.BaseStream.Read(dataBuffer, 0, dataBuffer.Length); вместо _serialPort.Read(dataBuffer, 0, dataBuffer.Length);, но возникает та же проблема. Я никогда не видел байтов за 4096 в буфере, поэтому я не уверен, как это сделать в среде Linux. Размер буфера меньше и не изменяется? Я использовал _serialPort.ReadBufferSize = 7000000;, но, похоже, это не помогло. Линукс машина или CentOS или Redhat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...