|
Не отдает ответ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 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Я не спец по Java, возможно здесь у вас блокирующее чтение: socketChannel.read(h); Кроме того, bb.flip - не меняется ли здесь порядок следования байт? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 11:50 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Arm79, я в java вообще не шарю( Спасибо за подсказку, поищу сейчас по справкам, может быть в этом и дело ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 12:03 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Приложите еще, что там конкретно вы отправляете на сервер. Что за последовательность байт ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 12:04 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
это не OPC случаем? тогда гуглите про протокол своего устройства ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 12:06 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Arm79, Это из java-примера запись в логе (первая строка текст запроса, вторая строка заголовок+закодированный текст запроса). {"password":"BXiUVPLN"} d5-80-d4-b4-d5-84-00-05-01-00-00-18-4b-24-29-15-9c-ef-1f-3a-b0-b6-f8-3a-d0-2d-24-60-81-28-51-33-2d-00-41-d3 После bb.flip() последовательность байтов не меняется, остается такая же, как выше (нумерация байтов слева-направо). Прикладываю так же скриншот байтового массива, который отправляется из моей программы. Для кодирования запросов используется стандартный алгоритм 3DES: ECB режим и PKCS padding ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 16:02 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaS{"password":"BXiUVPLN"} Девушка, к вам в компании так лояльно относятся, что вы спокойно пароли публикуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 18:17 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaS{"password":"BXiUVPLN"} Девушка, к вам в компании так лояльно относятся, что вы спокойно пароли публикуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 18:17 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
мда :) я не так давно случайно забыл включить авторизацию на своем проекси севрере :) через 5 дней обнаружил, что им уже пол интернета пользуется :D , при том, что не где не публиковал адрес сервера. (точнее я авторизацию настроил, а ограничения не включил) а тут совсем палево :) осталось только узнать, от чего пароль ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 18:43 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Arm79, это пароль тестового устройства, который был на этом устройстве установлен в момент посылки команды. Пароль меняется нажатием одной кнопки) Более того, это периферийное устройство ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 19:11 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Arm79, и да, пароль этот действует только для одной команды, для остальных запросов генерируется сессионный пароль. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 19:13 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaS, Если у вас сервер имеет выход в и-нет, можете дать ip, попробую проверить Только убедитесь, что он тестовый )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 20:04 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Arm79, попробуйте, конечно) А по теме обсуждения нет идей? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 20:26 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaSArm79, попробуйте, конечно) А по теме обсуждения нет идей? Как нет. Есть. Выложите байтовый массив запроса как приложение в виде файла, дайте IP, я проверю и дам код. По моему, ответ не менялся все это время - 21376831 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 21:57 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Arm79, тогда устройство надо настраивать на работу с Вашим ПК, т.к. оно может принимать запросы только с одного ip-адреса, и если я правильно понимаю, то они должны находиться в одной локальной сети. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2018, 10:20 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
EnyaS Код: vbnet 1.
Возможно, дело в этой строке ))) Из bb.Length не нужно вычитать 1 ни при записи, ни при чтении. 3 параметр - это КОЛИЧЕСТВО байт для отправки, а количество не zero-based В Java-коде тоже кстати без -1. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2018, 15:10 |
|
Не отдает ответTcpClient
|
|||
---|---|---|---|
#18+
Имитация сервера Код: 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.
Типа ваш клиент Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2018, 15:12 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1399377]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 303ms |
total: | 456ms |
0 / 0 |