|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Добрый день, уважаемые форумчане! Помогите, пожалуйста, разобраться, почему TcpClient не дает считать ответ от сервера. Итак, есть сетевое периферийное устройство (сервер), к которому обращается программа (клиент). Коннект есть, запрос отправляется, а вот при чтении DataAvailable=false, т.е. получить ответ от сервера не получается вообще никак. Понять, получил ли сервер запрос, нельзя, т.к. устройство не ведет лога. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Есть работающий пример работы с этим устройством на java. Сравнила сформированный мной и в примере запрос, они идентичны, но java-пример получает ответ, а моя программа нет. Если нужен код из java, могу приложить часть кода. Помогите, пожалуйста, всю голову уже сломала, что не так. Модератор: Тема перенесена из форума "Visual Basic". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2018, 18:48 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
не мучайте ..., используйте WCF при такой реализации можно скормить вашей программе, что угодно. Это ахтунг. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2018, 22:36 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
вот после этого: Код: c# 1.
надо ждать пока данные назад не станет отдавать устройство. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 11:18 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
сервер просто не успел отдать ответ, поэтому DataAvailable возвращает False DataAvailable - это не признак того, что сервер вернул ответ. Это признак того, есть ли в потоке хоть какие-то данные, которые можно вычитать? Поэтому цикл должен быть таким: Пока мы сами не определили, что сервер закончил отвечать Если DataAvailable == false, то задержка + continue Считать, все, что есть во входящем потоке и интерпретировать данные (включая анализ, закончил ли отвечать сервер) Конец цикла ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 12:39 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Konst_One, Ждала, ставила задержку до чтения ответа 30-60 секунд (как рекомендует производитель), результат тот же, ответа нет ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 17:25 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Roman Mejtes, к сожалению, с WCF никогда не сталкивалась. Если я правильно поняла, то кусок кода, который взаимодействует с устройством, Вы предлагаете оформить, как службу, а уже из приложения работать с этой службой? А что изменится в части получения ответа от устройства тогда, если коннектиться к нему все равно через сокеты? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 17:33 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Arm79, пробовала так, DataAvailable не становится true ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 17:42 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
ns.CanRead что у вас всегда False видимо, вы не проверили, значит в этом потоке читать нельзя ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 17:44 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaSArm79, пробовала так, DataAvailable не становится true Я сам не пробовал, но в доках везде сначала читают, а потом уж проверяют do { int bytes = stream.Read(data, 0, data.Length); } while (stream.DataAvailable); // пока данные есть в потоке ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 17:50 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Konst_One, CanRead как раз всегда true, сначала это проверяю, а потом уже, что есть данные для чтения ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 17:53 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaS, Возможно Read устанавливает DataAvailable ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 17:56 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
ViPRos, да, видела эти примеры. Если я правильно понимаю, то и до начала чтения DataAvailable должно быть true, ведь чтение еще не начато. Изначально проверку на DataAvaileble вообще не делала, объявляла массив размером dev.ReceiveBufferSize - результата нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 18:00 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
переведите на VB.NET и замените у себя цикл ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 18:00 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Konst_One, вот на этом месте вываливается и DataAvailable false всегда: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 18:05 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaS, А что выдает то? Вот вес код, тут либо икзепш, либо число байт Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 18:21 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
ViPRos, Exeption выдает. Код 5, текст дословно не помню, примерно: сервер не ответил в течение какого-то времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 18:47 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaS, ну, надо с этим разбираться тогда, поиграться с таймаутом и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 18:52 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
ViPRos, Вот, нашла текст ексепшна: a connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 18:55 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
ViPRos, Да уже по всякому я этот таймаут вертела: добавдяла, убавляла, ничего не помогает. В примере на java вообще нет каких-либо таймаутов, запос и сразу чтение - и есть ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 18:58 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaS, ну, тут мне сложно сказать, почему сервер не отвечает или что там еще мешает - не специалист ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 18:59 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
ViPRos, Спасибо, что не остались равнодушны. Возможно, кто-то еще увидит тему и подскажет) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 19:03 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
ViPRosEnyaSArm79, пробовала так, DataAvailable не становится true Я сам не пробовал, но в доках везде сначала читают, а потом уж проверяют do { int bytes = stream.Read(data, 0, data.Length); } while (stream.DataAvailable); // пока данные есть в потоке Так нельзя. Сервер может присылать порциями неравномерно. И вполне вероятно, что посреди передачи флаг примет значение False. Тогда цикл завершится досрочно. EnyaSViPRos, Вот, нашла текст ексепшна: a connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond Скорее всего вы что то не то передаете на сервер. Например, в вашем прикладном протоколе концом передачи является завершающая последовательность символов. И сервер ждет, пока вы ему не пришлете. Покажите рабочий код Java ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2018, 19:44 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaSк сожалению, с WCF никогда не сталкивалась. Так столкнитесь, что бы не изобретать велосипедов ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 10:57 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Arm79, Это код из рабочего примера на java. Между отправкой запроса и получением ответа пауз нет. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 11:30 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Cat2, столкнулась, почитала статьи и msdn, посмотрела примеры. Если я правильно поняла, то приложение мое должно работать со службой, которая в свою очередь будет работать с устройством. Вопрос остался тот же, как служба получит ответ от сервера (устройства), если сейчас у меня именно это и не получается? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 11:35 |
|
|
start [/forum/topic.php?fid=20&msg=39638195&tid=1399377]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 155ms |
0 / 0 |