|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|||||||||||
Прием данных клиентом TcpClient, данных попадается некорректные значения, почему?14.11.2015, 14:56. Показов 2165. Ответов 19
Метки нет (Все метки)
Есть сервер на си, который шлет ответ клиенту, вот тестовый кусок:
И вообще, может я не так данные принимаю и есть способ адекватнее?
0
|
|||||||||||
| 14.11.2015, 14:56 | |
|
Ответы с готовыми решениями:
19
Сокеты. Прием данных клиентом от сервера
Найти минимальный элемент массива. Прием данных, как указатель на начало масива, и как копию данных |
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
|
|
| 14.11.2015, 23:15 | |
|
А вы пробовали сачала прочитать полученные данные, а потом уже отправлять? А то вы сначала пишете в поток, а потом из него читаете, мне кажется это может вызвать проблемы как у вас.
0
|
|
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|||||||||||
| 14.11.2015, 23:23 [ТС] | |||||||||||
|
Спасибо за внимание к теме. Но суть в том что мне нужно сначала отправить данные потом получить. С основной проблемой я более-менее разобрался, теперь данные приходят от сервера нормально, но вот при посылке происходит что-то странное.
Вот часть, отвечающая за прием данных:
и "magc 0 cmd 2". Непонятно почему так происходит. Может дело в том что нельзя так последовательно отсылать данные через binarywriter? Но как тогда структуру отослать? Причем это касается в особенности структур с полем, которое содержит неизвестное заранее количество байт.
0
|
|||||||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
|
|
| 14.11.2015, 23:35 | |
|
Данные не обязательно приходят целиком. Это нужно учитывать при получении. Нужно сначала долждаться получания всех данных, а потом уже их обрабатывать.
Вот у вас iResult может быть как 4, так и 8 байт, поэтому если вы ожидаете 8 байт, нужно принимать пока не будут получены все 8 байт, и только потом уже их как-то обрабатывать.
2
|
|
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
||||||
| 14.11.2015, 23:40 [ТС] | ||||||
|
Да, 8 байт это в примере, вообще я буду использовать структуру с полями переменной длинны, поэтому тут, наверное, на количество байт не положится. Но вот этот код
0
|
||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
|
|
| 15.11.2015, 00:04 | |
|
Независимо от того как вы отправляете данные, они могут быть получены на другом конце частями. Поэтому это нужно учитывать и писать код который не сломается если данные пришли не полностью.
0
|
|
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
| 15.11.2015, 00:05 [ТС] | |
|
Но если данные переменной длины?
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
|
|
| 15.11.2015, 00:12 | |
|
Ну а как вы думаете что нужно сделать?
Hint: обычно в начале отправляют длинну данных.
0
|
|
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
| 15.11.2015, 00:14 [ТС] | |
|
Но мне сначала нужно отправить идентификатор пакета (magic). А потом уже остальные данные. Мне кажется еще какой-то вариант должен быть, чтобы не отталкивается от результата recv(), не?
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
|
|
| 15.11.2015, 00:24 | |
|
0
|
|
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
| 15.11.2015, 10:12 [ТС] | |
|
Нет, тогда странно получается. Зачем нужны структуры данных если все равно по кусочку их отправлять придется.
0
|
|
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
||
| 15.11.2015, 12:00 | ||
|
http://www.theasciicode.com.ar... ode-2.html
0
|
||
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
| 15.11.2015, 12:11 [ТС] | |
|
Так, тогда я запутался. Получается что нужно сначала отправить байт с STX, потом структуру, потом ETX. На принимающей стороне читать сокет, потом искать в приемном буфере ETX, и если его нет, то скидывать данные во временный буфер, потом читать еще, и делать так пока ETX не получу? Какая-то непростая схема получается.
0
|
|
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|
| 15.11.2015, 12:48 | |
|
именно. Причем учитывая, что с ETX ты можешь получить еще и STX со своим ETX
0
|
|
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
| 15.11.2015, 13:40 [ТС] | |
|
Как это, в каком случае такое может произойти? (И что тогда делать =\)
0
|
|
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|
| 15.11.2015, 13:54 | |
|
разбирать цепочки, что делать. если ты отправил <STX>lfsdlkjfshlkfjgdfsk<ETX><STX>slkfjh slkfjhslkfhjsd<ETX>
протокол гарантирует доставку, но необязательно целиком, возможно частями
1
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
|
|
| 15.11.2015, 16:49 | |
|
STX/ETX тут совсем не обязательны, можно просто указывать длинну.
0
|
|
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
|
| 15.11.2015, 17:30 [ТС] | |
|
Я понял, наверное так и придется поступить. Потому что других адекватных путей пока не видно.
0
|
|
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|
| 16.11.2015, 09:09 | |
|
0
|
|
|
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
|
||||||
| 16.11.2015, 12:43 [ТС] | ||||||
|
Как и писал Someone007, придется ждать пока пакет целиком не прочитается, а потом уже смотреть че там пришло.
0
|
||||||
| 16.11.2015, 12:43 | |
|
Помогаю со студенческими работами здесь
20
Почему значения получаются одни и те же, при вводе разных данных?
Шифровка данных между клиентом и сервером Передача данных между клиентом и сервером Передача данных между клиентом и сервером Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|