2015-08-11 2 views
1

Я пытаюсь вытащить информацию метки RFID с помощью считывателя Speedin Speedway через tcpip. Чтобы получить доступ к информации от читателя, я должен пройти через HTTPS и определенный порт. Мой код:У меня проблемы с запуском моего рубинового кода

require 'socket' 

# The IP address or hostname of your reader 
READER_HOSTNAME = 'https://10.57.237.50' 
# The TCP port specified in Speedway Connect 
READER_PORT = 14150 

# Create a TCP socket connection to the reader 
s = TCPSocket.open('https://10.57.237.50', 14150) 
# Receive data in an infinite loop 
while true 
    # Read one line at a time 
    line = s.gets 
    # Print it to the screen 
    print line  
end 

Это похоже на запуск, но не завершено. Рубин висит на мигающем курсоре. Я думаю, что это имеет какое-то отношение к порту и, возможно, даже к безопасному HTTP.

+0

Что вы имеете в виду, никогда не заканчивается? Не печатает ли что-нибудь? У вас бесконечный цикл while, поэтому я не ожидал, что программа действительно закончится. – mtamhankar

+0

'while true' никогда не закончится. – sevenseacat

+1

«Я вообще не программист» - это дерьмо. Вы написали код (или пытаетесь), поэтому вы программист. Не считайте себя, потому что вы новичок. – jkeuhlen

ответ

2

Ваша проблема в том, что у вас бесконечный цикл.

while true # This runs FOREVER (or at least until ctrl-c) 
    # Read one line at a time 
    line = s.gets 
    # Print it to the screen 
    print line  
end 

Вы действительно должны изменить это, чтобы быть:

while line = s.gets # Read one line at a time 
    # Print it to the screen 
    print line  
end 

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

s.close 

Если вы хотите немного больше читать, чтобы сделать, проверить Ruby documentation on sockets Это имеет несколько простых примеров, как ваша.

+0

Я внес изменения в сообщение jkeuhlen, но он все еще висит на курсоре. –

+0

Я использую textmate, чтобы написать код, и 14150 выделен красным цветом, и именно поэтому я думаю, что это проблема порта –

+0

Есть ли что-нибудь в сокете? Прочитайте, как работают сокеты в целом. Если он висит сейчас, это потому, что он ждет, чтобы что-то появилось в сокете (это то, что делает 'gets', ждет ввода). Как только вы что-то подадите в этот сокет, он распечатает его, и программа закончится. – jkeuhlen

0

С помощью поддержки Impinj мы обнаружили, что в Speedway Connect произошла ошибка, если было выбрано больше портов антенны, чем было доступно (все по умолчанию выбраны), зависает программа. В моей конфигурации (4 порта на концентраторах Reader + (2)) Порты: 1-8 + 9-16 + 17 + 25. Спасибо всем, кто пытался помочь.

Смежные вопросы