5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
|
||||||
1 | ||||||
Как принять информацию от TCP сервера вычитать ключ который он прислал?10.09.2014, 17:17. Показов 2230. Ответов 23
Метки нет (Все метки)
Собственно, все в названии.
Есть так же нужный код на C#, но перевести не могу, нет скилла=)
0
|
10.09.2014, 17:17 | |
Ответы с готовыми решениями:
23
TCP клиент: Не получается принять сообщение от сервера Как принять JSON на tcp сервере? Как правильно принять данные по TCP протоколу функцией recv? Как правильно принять изображение JPG и записать в файл TCP |
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
10.09.2014, 21:12 | 2 |
Не проще ли будет реализовать все это по формальному описанию протокола, а не тупо портируя в делфи сомнительный по надежности чужой код ?
0
|
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
|
|
10.09.2014, 23:03 [ТС] | 3 |
Может и проще, но... я в этой теме(tcp) совершенно новенький, так что толком ничего не знаю. И обгуглили я уже много всего, но ничего кроме банальной передачи текста(а это просто) я не нашел...
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
10.09.2014, 23:08 | 4 |
Так оно у тебя есть или оно у тебя нет - формальное описание протокола ?
1
|
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
|
|
10.09.2014, 23:13 [ТС] | 5 |
Вот блин, я так глуп. Намекните что это?)
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
10.09.2014, 23:25 | 6 |
Ну к примеру:
1. Клиент (К) устанавливает соединение с сервером (С) 2. (К) отправляет (С) сообщение "Привет !" 3. (С) в ответ на именно такое полученное сообщение отправляет (К) сообщение "Пока !" 4. (С) разрывает соединение с (К) Это последовательные этапы протокола информационного обмена между (К) и (С). Заметь что в них вообще не идет речь о способах доставки сообщений от (К) к (С) и в обратном направлении, ибо это транспортный (а не прикладной) уровень инф.взаимодействия. Это м.б. и TCP и любой другой протокол - суть от этого не меняется: (С) отвечает (К) только при условии что получит именно такое-то предопределенное протоколом сообщение, и ответит он на это сообщение именно таким-то предопределенным тем же протоколом сообщением.
1
|
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
|
||||||
10.09.2014, 23:42 [ТС] | 7 | |||||
Ага, значит у меня так.
1. Клиент подключается к серверу 2. Сервер отправляет клиенту пакет в котором содержится ключ для HMACMD5 хеширования + еще кое какую инфу. 3. Клиент хеширует данные и отправляет их серверу. 4. Сервер отправляет клиенту результат обработки. И моя проблема состоит уже во 2 пункте. Не могу я вычитать ключ из этого пакета... Вот такой у него вид Добавлено через 17 секунд
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
10.09.2014, 23:45 | 8 |
DonniGood, ты вообще на чем пишешь?
Это раздел Delphi - если что...
1
|
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
|
|
10.09.2014, 23:48 [ТС] | 9 |
На делфях я пишу, но цепляюсь за куски C# кода найденного на просторах интернета=)
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
11.09.2014, 09:17 | 10 |
byte KeyLen;
byte[KeyLen] Key; byte AuthType; byte[4] ServerVersion; byte Bonus; Итого N = 7 + KeyLen байт. Последовательность приема пакета: 1. Читаешь 1 байт - из него получаешь значение KeyLen. 2. Читаешь KeyLen байт 3. Читаешь оставшиеся N - KeyLen - 1 байт Все, пакет принят, можно переходить к п.3 своего протокола
1
|
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
|
|
11.09.2014, 15:02 [ТС] | 11 |
Спасибо огромное! И пожалуй последний вопросик. Как прочитать этот самый первый байт? Опять же понятной инфы я не нашел, одни чаты везде.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
||||||
11.09.2014, 15:23 | 12 | |||||
0
|
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
|
|
11.09.2014, 16:33 [ТС] | 13 |
Ага, а сам ключ и все остальное уже читать из переменной Buffer, так?
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
11.09.2014, 16:48 | 14 |
Да, так
0
|
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
|
||||||
11.09.2014, 21:45 [ТС] | 15 | |||||
Ну как бы у меня что то заработало
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
11.09.2014, 21:52 | 16 |
На основании чего именно 52 ?
Это WireShark так говорит ? Приведи hex-дамп пришедшего пакета (те самые 52 байта), который ты увидел в WireShark ..
1
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
11.09.2014, 21:55 | 17 |
Это случайность. Данные надо накапливать.
И цикл должен быть до BytesReadInFact-1. И str инициализировать надо.
1
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
11.09.2014, 22:06 | 18 |
Если это самый входящий первый пакет, то что там накапливать ?
К тому же, если Buffer - локальная переменная, то крайне маловероятно, что после удачного чтения именно 52-х байт там вместо мусора окажется 52 нуля. То ли то не первый пакет, то ли это совсем иные данные, не соответствующие заявленному выше протоколу .. Если это самое первое по времени использование str, начиная со времени ее попадания в область видимости приведенного фрагмента кода, то нафига ? Она и так заведомо пустая в этот момент .. Добавлено через 15 секунд Если это самый входящий первый пакет, то что там накапливать ? К тому же, если Buffer - локальная переменная, то крайне маловероятно, что после удачного чтения именно 52-х байт там вместо мусора окажется 52 нуля. То ли то не первый пакет, то ли это совсем иные данные, не соответствующие заявленному выше протоколу .. Если это самое первое по времени использование str, начиная со времени ее попадания в область видимости приведенного фрагмента кода, то нафига ? Она и так заведомо пустая в этот момент ..
0
|
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
|
|
11.09.2014, 22:06 [ТС] | 19 |
Вот то что присылает сервер 013210790000c000000000a7e4c6745d0600ce00010501001a333030303030366137363533663537 393036353066376261383300
Что то я совсем запутался... http://pumpshooter.com/lNqTBxXa
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
11.09.2014, 22:15 | 20 |
А как ты отличишь первый пакет от непервого, обработчик-то один. Ему их все принимать.
И где гарантии, что весь первый пакет придет за один раз. По str - аналогично - этот обработчик будет принимать все пакеты, а не только первый. Добавлено через 58 секунд Кстати, нигде не нашел: разве принимаемый пакет не может быть больше 256 байт?
0
|
11.09.2014, 22:15 | |
11.09.2014, 22:15 | |
Помогаю со студенческими работами здесь
20
Как принять информацию из БД Как программно принять сертификат сервера https Как принять почту в Thunderbird с VPS-сервера? Как правильно передать и принять файлы на (с) Ftp-сервера? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |