2013-08-09 6 views
2

У меня есть считыватель штрих-кодов TCP/IP для Microscan. В настоящее время я использую следующий код для подключения к нему и получить штрих-кода при чтении:Только получение штрих-кода с помощью штрих-кода TCP/IP

// responseData string will be the barcode received from reader 
string responseData = null; 

TcpClient client = new TcpClient("10.90.10.36", 2001); 

// The "getData" is just a generic string to initiate connection 
Byte[] sentData = System.Text.Encoding.ASCII.GetBytes("getData"); 
NetworkStream stream = client.GetStream(); 
stream.Write(sentData, 0, sentData.Length); 
Byte[] receivedData = new Byte[20]; 
Int32 bytes = stream.Read(receivedData, 0, receivedData.Length); 

for (int i = 0; i < bytes; i++) 
{ 
    responseData += Convert.ToChar(receivedData[i]); 
} 

// Closes the socket connection. 
client.Close(); 

Вопрос, который я имею, что я только получаю 10 символов, если штрих-код 15. Все работает правильно до тех пор, Int32 bytes = stream.Read(receivedData, 0 receivedData.Length); линия. Вызов Read возвращает 10, а не 15, как и должно быть. Я попытался изменить код несколькими способами, но все они только что вернули 10 символов, как обычно. Это работает правильно, если штрих-код составляет 10 символов или меньше, но не больше.

Я не думаю, что это проблема со сканером, но я также проверяю это. У кого-нибудь есть идеи?

+0

Получил ссылку на API сканера? Я googled и нашел документ, но он не кажется правильным, потому что он не поддерживает никакой опции «getData». – spartygw

+0

На самом деле я не видел API для сканера. Строка «getData», которую я отправляю, является просто чем-то общим, так как сканеру нужен какой-то тип данных для отправки для установления соединения с клиентом, и любая строка будет работать. – danielunderwood

+0

Являются ли 10 символов, которые вы получаете в качестве первых 10 в штрих-коде? Может быть, вы не получаете данные штрих-кода, а что-то еще, возможно, код ошибки? – spartygw

ответ

2

Try что-то вроде:

// responseData string will be the barcode received from reader 
string responseData = null; 

using (TcpClient client = new TcpClient("10.90.10.36", 2001)) 
{ 
    using (NetworkStream stream = client.GetStream()) 
    { 
     byte[] sentData = System.Text.Encoding.ASCII.GetBytes("getData"); 
     stream.Write(sentData, 0, sentData.Length); 

     byte[] buffer = new byte[32]; 
     int bytes; 

     while ((bytes = stream.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      for (int i = 0; i < bytes; i++) 
      { 
       responseData += (char)buffer[i]; 
      } 
     } 
    } 
} 

while цикл будет повторяться, пока есть новые символы, которые могут быть получены. Я даже положил около using вокруг вашего кода (лучше использовать их вместо Close ручных объектов)

+0

Хммм. По какой-то причине кажется, что я где-то застреваю внутри петли. Я прохожу через цикл while пару раз, а затем застревает в цикле for, я думаю. – danielunderwood

+0

@ danielu13 Возможно, он получает только новые строки? Попытайтесь просмотреть ответную информацию после каждой передачи. – xanatos

+0

Получает всю строку в 'responseData', и теперь я думаю, что она выходит из цикла while. Это просто не доходит до моего заявления о возврате, но единственное, что есть перед возвратом, - это цели использования. – danielunderwood