Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
1

Как принять информацию от TCP сервера вычитать ключ который он прислал?

10.09.2014, 17:17. Показов 2243. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно, все в названии.
Есть так же нужный код на C#, но перевести не могу, нет скилла=)
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
public bool Check(string login, string pass)
        {
            Result = false;
            Connected = false;
 
            TcpClient tcp = new TcpClient();
            try
            {
                tcp.Connect(IP, Port);
            }
            catch { return false; }
 
            Socket skt = tcp.Client;
            Connected = skt.Connected;
            while (skt.Connected)
            {
                byte[] buf = new byte[0xFF];
                skt.Receive(buf);
                if (buf[0] == 0x01)
                {
                    List<byte> Send = new List<byte>();
 
                    byte[] key = new byte[0x10];
                    for (int i = 0; i < 0x10; i++) key[i] = buf[i + 3];
 
                    byte[] loginbt = Encoding.GetEncoding(1251).GetBytes(login);
                    byte[] hash = GetHash(key, login, pass);
                    Send.Add((byte)loginbt.Length);
                    Send.AddRange(loginbt);
                    Send.Add((byte)hash.Length);
                    Send.AddRange(hash);
                    Send.Add(0x00);
 
                    Send.Insert(0,(byte)Send.Count);
                    Send.Insert(0, 0x03);
 
                    skt.Send(Send.ToArray());
                    continue;
                }
 
                Result = buf[0] == 0x02;
                break;
            }
            skt.Close();
            return Result;
        }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2014, 17:17
Ответы с готовыми решениями:

TCP клиент: Не получается принять сообщение от сервера
Добрый день, хочу попробовать реализовать на Indy обмен с сервером. Я ему посылаю сообщение, он...

Как принять JSON на tcp сервере?
Я с клиента андроид на tcp сервер qt хочу отправить JSON как на сервере методами Qt его можно...

Как правильно принять данные по TCP протоколу функцией recv?
Всем добрый вечер! Пытаюсь реализовать получение данных с устройства через TCP. linux OS. Данные...

Как правильно принять изображение JPG и записать в файл TCP
Я с TCP клиента андроид передаю на сервер файл JPEG.Данные вроде отправляются нормально, но на...

23
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
11.09.2014, 22:19  [ТС] 21
Author24 — интернет-сервис помощи студентам
Пакет приходит только один, я уверен.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.09.2014, 22:55 22
Лучший ответ Сообщение было отмечено DonniGood как решение

Решение

Цитата Сообщение от FIL Посмотреть сообщение
обработчик-то один
Ну я так полагаю, что ТС привел данные о результатах самого первого чтения из канала сразу после установки соединения)
Если это не так, то тут и рассуждать не о чем - нет достоверных сведений о неукоснительном следовании протоколу..

Цитата Сообщение от FIL Посмотреть сообщение
И где гарантии, что весь первый пакет придет за один раз
Да нет никаких гарантий)
Но опять же - рассматривается тестовый пример в предположении что это самое первое чтение из потока после установки соединения.

Цитата Сообщение от FIL Посмотреть сообщение
принимаемый пакет не может быть больше 256 байт?
В дан.случае может. Но об этом потом.

Добавлено через 26 минут
Цитата Сообщение от DonniGood Посмотреть сообщение
Что то я совсем запутался
О-о-о, парень, да у тебя основательные проблемы в знании OSI ..
Сниффер-то тебе кажет дамп IP-дейтаграммы, а не дамп пэйлоуда в составе TCP-сегмента, инкапсулированного в IP-дейтаграмму !

Из дампа я вижу что поле KeyLen равно $1A (26.) и за ним следуют 26 байт собственно данных ключа:
3330303030303661373635336635373930363530663762613833

Откуда у тебя нули в буфере и почему приведенное содержимое строки при этом вполне соответствует дампу - ума не приложу.. Косяк где-то за пределами этого кода
1
5 / 5 / 0
Регистрация: 03.07.2013
Сообщений: 106
11.09.2014, 23:02  [ТС] 23
Мда... Все ооочень плохо. Рано мне еще сюда. Всем спасибо за ответы.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.09.2014, 23:09 24
Цитата Сообщение от FIL Посмотреть сообщение
А как ты отличишь первый пакет от непервого, обработчик-то один
В дан.случае я предполагвю что у ТС это первое срабатывание OnRead
Т.е. об аккумуляции пока вообще речь не идет - об этом чуть позже, когда ТС вдуплит разницу между тем что кажет WireShark и тем что он ожидает увидеть у себя в программе)

Добавлено через 1 минуту
Цитата Сообщение от DonniGood Посмотреть сообщение
Рано мне еще сюда
Может и рано)
Но уж коль скоро начал разбираться, то разберись до конца в уже полученной инф-ции !
А мы тебе в этом чем можем поможем, на то мы тут и протираем штаны)
1
11.09.2014, 23:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2014, 23:09
Помогаю со студенческими работами здесь

Как принять информацию из БД
Код ищет в строке 123 и заменяет символы на &quot;ok&quot; потом выводит. Проверено. &lt;?php ...

Как программно принять сертификат сервера https
Привет! У меня есть код который проходит регистрацию, но у сервера просрочен сертификат как...

Как принять почту в Thunderbird с VPS-сервера?
Всем доброго времени суток! Недавно взял VPS на Ubuntu 12.04, поставил туда ISPmanager Lite. Тот...

Как правильно передать и принять файлы на (с) Ftp-сервера?
Как правильно передать и принять файлы на (с) Ftp-сервера?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru