2015-02-12 1 views
1

У меня есть один TELNET SERVER здесь, и эта программа Vessel v1.0 для СССР является клиентом, она будет подключена к серверу telnet, серверу telnet-сервера SPAMS, я имею в виду отправку данных очень быстро для клиента.Обработка строк не может идти в ногу с розетками

(Ну, первоначально сервер Telnet является микроконтроллер, который считывает 5 датчиков и данные будут отправлены обратно клиенту, так что это должно быть довольно медленнее, чем C# программа телнет сервер я использую в качестве замены)

Проблема в том, что я использую регулярное выражение для разделения строки, поступающей с сервера.

Строка должна быть такой: Q0.00W0.10X0.30Y0.44Z99.00, вы видите, я стираю Q/W/X/Y/Z, а затем сохраняю значения в строковом массиве и затем распечатайте их на 5 ярлыков, но я получаю эту ошибку, см. снимок экрана ниже. Я добавил большое текстовое поле для целей отладки. Смотрите мой код в получении строки через Telnet:

enter image description here

public void OnAddMessage(string sMessage) 
{ 
    //Q0.00W0.10X0.30Y0.44Z99.00 
    string[] lines = Regex.Split(sMessage, "\r\n"); 
    foreach (string line in lines) 
    { 
     Console.WriteLine(line); 
     valuesStr[ctr2] = line; 
     ctr2++; 
    } 

    ctr2 = 0; 
    m_lbRecievedData.Items.Add(sMessage); 
    tempVal.Text = valuesStr[4]+ "°C"; 
    frontVal.Text = valuesStr[0]; 
    backVal.Text = valuesStr[1]; 
    leftVal.Text = valuesStr[2]; 
    rightVal.Text = valuesStr[3]; 
} 
+0

почему вы используете Regex.Split вместо String.Split или, возможно, даже StringReader.ReadLine? – Pawel

+0

Какая ошибка? Снимок экрана не объясняет, что происходит. – Setsu

+2

Одна вещь, которую я бы вынул, - 'Console.WriteLine()'; если этот метод действительно называется быстрым, то IO не является хорошей идеей. – Setsu

ответ

1

Ваш вопрос нуждается в большем количестве разъяснения того, что вы хотите. Как бы то ни было, код ничего не делает для выполнения того, что вы утверждаете, что это нужно делать, а именно «стирание Q/W/X/Y/Z, а затем сохранение значений в массиве строк».

Тем не менее, вот попытка на решение проблемы, сформулированные в вопросе:

using System.Text.RegularExpressions; 

private Regex regex = new Regex("[QWXYZ]"); 

private void OnAddMessage(string message) 
{ 
    using (StringReader sr = new StringReader(message)) 
    { 
     string line; 

     while ((line = sr.ReadLine()) != null) 
     { 
      string[] splitContents = regex.Split(line); 

      //do something with the parsed contents ... 
     } 
    } 
} 
+0

yey! Спасибо тебе так много !!! – Glenn

+1

, но опять же, я прав, программа C# не может поддерживать скорость передачи данных с сервера. Я просто добавляю 100 микросекундную задержку на сервере каждый раз, когда он отправляет данные;). – Glenn

0

Попробуйте реализацию RegEx от Micro Framework

http://netmf.codeplex.com/

Вот веб-литая, объясняющую его!

http://channel9.msdn.com/coding4fun/blog/Net-Micro-Framework-v42-RTWs

Это, возможно, лучше, потому что она позволяет сопрягать для явного количества времени, а затем возобновить, где вы остановились .. то, что не легко можно по умолчанию с Full Fx.

http://www.codeproject.com/Articles/386890/String-Manipulation-in-the-NET-Micro-Framework