Как мне получить несколько ответов на один запрос TCP/IP?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как мне получить несколько ответов на один запрос TCP/IP?

Сообщение Anonymous »

Я работаю с сторонним устройством, с которым я общаюсь через соединение TCP/IP. Согласно руководству, я был предоставлен поставщиком, инструмент запускается, когда я отправляю в него команду Run (сообщение запроса). Сразу же после отправки команды запуска я получаю сообщение ответа, которое запускает OK от контроллера инструмента. Инструмент начинает делать свое дело, как и ожидалось. Руководство указывает, что по завершению инструмента я должен получить два дополнительных ответа на сообщение запроса запуска, которое я отправил. (EOT - для последней точки маркировки и ENQ - указывая на домашнее положение). Процесс маркировки может занять несколько секунд. Может ли кто -нибудь с большим опытом, чем я помог мне услышать. Как я могу продолжать читать блок потока, полученные ответы EOT и ENQ или NAK? Я не могу просто прочитать определенное количество байтов. Я изо всех сил пытаюсь придумать способ продолжать читать поток, пока не получу ответ ENQ или NAK. Пример кода будет оценен. src = "https://i.sstatic.net/klfczvb8.png"/>

Протокола инструмента.Please see the code below that demonstrates how I handled receiving the multiple response messages. I would be appreciative if anyone has recommendation on how to do things a better way. Would like to thank Marc. I read the linked articles that helped my grasp some of the basic things I was missing. Here's My code:

#region "wait for test results"
if ((int)cbCommand.SelectedIndex == (int)enum_commands.enum_Run)
{
string CMDResponse1 = string.Empty;
int MarkingResponseBytes = 0;
bool ACK_Received = false; //Acknowledge
bool DC4_Received = false; //Device Control 4
bool ENQ_Received = false; //Enquiry Transmission
bool EOT_Received = false; //End of Transmission
bool NAK_Received = false; //Negative Acknowledge

while (!NAK_Received && !ENQ_Received)
{
Byte[] MarkingResponse = new Byte[256];
MarkingResponseBytes = stream.Read(MarkingResponse, 0, MarkingResponse.Length);

Thread.Sleep(500);

var markresponse = Encoding.ASCII.GetString(MarkingResponse, 0, MarkingResponseBytes);

#region "RUN OK response received"
if (markresponse.Contains("RUN OK"))
{
ACK_Received = true;
rtbResponses.Text = Encoding.ASCII.GetString(MarkingResponse, 0, MarkingResponseBytes);
}
#endregion
#region "P response received"
if (Encoding.ASCII.GetString(MarkingResponse, 0, MarkingResponseBytes).ToLower() == "p")
{
rtbResponses.Text = rtbResponses.Text + "\n" + Encoding.ASCII.GetString(MarkingResponse, 0, MarkingResponseBytes);
}
#endregion
#region "EOT Repsonse Received"
if (markresponse.Contains("\u0004"))
{
EOT_Received = true;
rtbResponses.Text = rtbResponses.Text + "\n" + "End of Transmission (EOT) response received.";
}
#endregion
#region "ENQ Repsonse Received"
if (markresponse.Contains("\u0005"))
{
ENQ_Received = true;
rtbResponses.Text = rtbResponses.Text + "\n" + "Enquiry Transmission (ENQ) response received.";
}
#endregion
#region "DC4 Response Received"
if (markresponse.Contains("\u0014"))
{
DC4_Received = true;
rtbResponses.Text = rtbResponses.Text + "Device Control 4 (DC4) response received.";
}
#endregion
#region "NAK Response Recieved"
if (markresponse.Contains("\u0015"))
{
NAK_Received = true;
rtbResponses.Text = rtbResponses.Text + "\nNegative Acknowledgement (NAK) response received."
+ "\nMarking out of bounds";
}
#endregion
}
}
#endregion


Подробнее здесь: https://stackoverflow.com/questions/794 ... ip-request
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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