Запись Ruby TCPSocket не работает, но помещает, делает?

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

Используйте runOnUiThread() в этом случае.

6
задан nathan 21 July 2009 в 17:07
поделиться

3 ответа

Вы уверены, что проблема не на стороне сервера? Используете ли вы какой-либо метод для чтения, который ожидает строку или что-то, заканчивающееся на "\ n"?

4
ответ дан 10 December 2019 в 00:42
поделиться

С учетом буферизации в предыдущих сообщениях для решения вопроса о том, являются ли данные при отправке рассмотрите возможность захвата данных в строке, используя что-то вроде wirehark . Если данные, которые вы отправляете, видны в строке, значит, сервер их не получает.

В противном случае, если данные не поступают в линию, TCP может удерживать данные, чтобы избежать отправки одного сегмента только с несколько байтов в нем ( см. Алгоритм Нэгла ). В зависимости от вашей ОС или поставщика TCP у вас может быть разное поведение, но большинство стеков TCP поддерживают параметр TCP_NODELAY, который может помочь получить данные более своевременно.

tcp_client.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)

Это может помочь в отладке, но обычно не должно '

4
ответ дан 10 December 2019 в 00:42
поделиться

Попробуйте явную очистку:

tcp_client = TCPSocket.new( ipaddr, port )
tcp_client.write( 'Z' ) 
tcp_client.send( 'Z' ) 
tcp_client.flush

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

2
ответ дан 10 December 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: