Проблема с чтением двоичных данных из объекта networkStream.C#

Место общения программистов C#
Anonymous
Проблема с чтением двоичных данных из объекта networkStream.

Сообщение Anonymous »

Что касается моих потребностей в получении двоичных данных из локальной сети SCPI, связанной с некоторым измерительным оборудованием,
сначала я попробовал использовать объект StreamReader следующим образом:

Код: Выделить всё

public async Task Transmit ()
{
IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 0, 21 });
TcpClient client = new TcpClient();

await client.ConnectAsync(ipAddress, 5555); // Connect

NetworkStream networkStream = client.GetStream();
StreamWriter writer = new StreamWriter(networkStream);
StreamReader reader = new StreamReader(networkStream);

writer.AutoFlush = true;

//SEND Command to Machine
await writer.WriteLineAsync("WAV:READ?" + "\n");

//Receive Data from Machine
string respond= await reader.ReadLineAsync();

return respond;
}
он ​​работает нормально, но проблема в том, что реальные данные отправляются в двоичном формате, и, как я узнал, StreamReader не может обрабатывать двоичные данные, также я пытался изменить разные Unicodes, например UTF8. и снова все данные размером более 127 меняются на 65536, когда я пытаюсь преобразовать строку в двоичный формат с помощью:

Код: Выделить всё

byte[] RawData = System.Text.Encoding.ASCII.GetBytes(data);
поэтому я попробовал использовать BinaryReader, который не поддерживает asyncRead, поэтому я попытался использовать метод опроса, проверив свойство DataAvailable в networkSteam такой объект:

Код: Выделить всё

//...
while (true)
{
if (networkStream.DataAvailable)
{
byte b = binaryReader.ReadByte();
//.. do grabbing data and find EOP by dispatching data packet
//.. size could varies
//.. if(EOP)
//.. {
//..     break;
//.. }
}
}
но networkStream.DataAvailable никогда не становится истинным, также у меня не было возможности получить какой-либо байт изbinaryReader.ReadByte() даже без проверки DataAvailable prop.
также, что касается моего проекта, важно поддерживать метод async, который, похоже, не поддерживается бинарным Reader ;
мой код работает под .NetFramework 4.6.
есть ли у кого-нибудь предложения, которые помогут мне решить мою проблему, пожалуйста?

Подробнее здесь: https://stackoverflow.com/questions/790 ... eam-object

Вернуться в «C#»