Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 16.08.2008, 14:20   #1
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию Отправить\принять пакет TCPClient

Установила коннект с сервером через Indy(TCPClient) , расскажите пожалуйста , как принимать \ отправлять пакеты теперь? Пока без расшифровки
Amorality вне форума   Ответить с цитированием
Старый 16.08.2008, 15:14   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

там должны быть какието функции типа ReadToBuffer и WriteToBuffer
подробнее сказать не могу, я с сокетами на АПИ тока работаю...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 16.08.2008, 15:21   #3
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Где бы только поподробнее об этом почитать? Весь яндекс и гугл уже перерыла , там только примерно все ..

А ты ведь тоже своего бота пишешь, как ты тогда добираешься до логин сервера и отправляешь\принимаешь пакеты ?)
Amorality вне форума   Ответить с цитированием
Старый 16.08.2008, 15:26   #4
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

написал свой класс реализующий нужные мне функции соединения и обмена пакетами через WinAPI функции...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 16.08.2008, 15:45   #5
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Не, это для меня пока сложновато
Вот нашла парочку процедур для Инди:
procedure ReadBuffer(var ABuffer; const AByteCount: Longint);
procedure WriteBuffer(const ABuffer; AByteCount: Longint; const AWriteNow: Boolean = False);

Кто-нибудь знает как их использовать?)

Добавлено через 16 минут
Вот , похоже уже что-то получилось, смогла сделать вывод текущего приходящего пакета в Memo , пришло правдо:
"п|(Zx"
(При простом коннекте к логин серверу) , нужно теперь научиться отправлять пакет, чтобы проверить, ответит ли мне логин сервер

Последний раз редактировалось Amorality, 16.08.2008 в 15:45. Причина: Добавлено сообщение
Amorality вне форума   Ответить с цитированием
Старый 16.08.2008, 16:01   #6
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Вот состояние программы после 4ех коннектов
Миниатюры
Нажмите на изображение для увеличения
Название: conn.JPG
Просмотров: 633
Размер:	13.7 Кб
ID:	91  
Amorality вне форума   Ответить с цитированием
Старый 16.08.2008, 16:08   #7
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Amorality, на хрень не ответит)
принимать пакет думаю стоит так:
delphi Код:
var   size: word;   pck: string; begin   TCPClient.ReadBuffer(size, 2);   SetLength(pck, size-2);   TCPClient.ReadBuffer(pck[1], size-2);   // усё, пакет (не считая размера) в переменной pck end;
для удобочитаемости пакета вот функция перевода его HEX:
delphi Код:
function StringToHex(str1,Separator:String):String; var   buf:String;   i:Integer; begin   buf:='';   for i:=1 to Length(str1) do begin     buf:=buf+IntToHex(Byte(str1[i]),2)+Separator;   end;   Result:=buf; end;
и обратно:
delphi Код:
function HexToString(Hex:String):String;   function SymbolEntersCount(s: string): string;   var     i: integer;   begin     Result := '';     for i := 1 to Length(s) do       if not(s[i] in [' ',#10,#13]) then         Result:=Result+s[i];   end; var   buf:String;   bt:Byte;   i:Integer; begin   buf:='';   Hex:=SymbolEntersCount(UpperCase(Hex));   for i:=0 to (Length(Hex) div 2)-1 do begin     bt:=0;     if (Byte(hex[i*2+1])>$2F)and(Byte(hex[i*2+1])<$3A)then bt:=Byte(hex[i*2+1])-$30     else if (Byte(hex[i*2+1])>$40)and(Byte(hex[i*2+1])<$47)then bt:=Byte(hex[i*2+1])-$37;     if (Byte(hex[i*2+2])>$2F)and(Byte(hex[i*2+2])<$3A)then bt:=bt*16+Byte(hex[i*2+2])-$30     else if (Byte(hex[i*2+2])>$40)and(Byte(hex[i*2+2])<$47)then bt:=bt*16+Byte(hex[i*2+2])-$37;     buf:=buf+char(bt);   end;   HexToString:=buf; end;
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился 5 спасибками от:
Старый 16.08.2008, 16:18   #8
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Спасибо, вот только есть некоторые трудности

Сначало пытаюсь разобраться с приемом пакета, в моем случае ( С выводом в Memo код будет таков?
try
IdTCPClient1.ReadBuffer(size, 2);
SetLength(pck, size-2);
IdTCPClient1.ReadBuffer(pck[1], size-2);
Memo1.Lines.Add(pck);
finally

Вот только зависает программа, когда нажимаю кнопку Connect Да так, что выключить ее можно только убив процесс, что делать ?
Amorality вне форума   Ответить с цитированием
Старый 16.08.2008, 17:39   #9
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Amorality, я тебе для чего дал код функции StringToHex?
для того чтобы ты в memo выводил нормально...
delphi Код:
try IdTCPClient1.ReadBuffer(size, 2); SetLength(pck, size-2); IdTCPClient1.ReadBuffer(pck[1], size-2); Memo1.Lines.Add(StringToHex(pck,' ')); finally

Добавлено через 1 минуту
Amorality, зависает кста в каком месте?, или ты трейсером пользоваться не умееш?

Добавлено через 2 минуты
зависает наверно из за того что ты читаеш данные до соединения с сервером а эти функции чтения будут стоять на месте пока не получат данные которые если соединение ещё не установлено или если все данные уже прочитаны взять неоткуда...
__________________
Я здесь практически не появляюсь!, Skype - ikskor

Последний раз редактировалось xkor, 16.08.2008 в 17:39. Причина: Добавлено сообщение
xkor вне форума   Ответить с цитированием
Старый 16.08.2008, 17:52   #10
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

xkor,
Так все равно зависает ..

На счет того, что я выполняю это до соединения с сервером, быть такого не может, тк все, что между try и finally выполняется после Connect; а Коннект удачный, это я проверяю выводом сообщения на экран.

Трейсером я пользоваться не умею и не знаю что это ..
Зависает сразу после нажатия кнопки Connect , пробовала оставить на кнопке Коннект только КОннект, а твою процедуру перенести на отдельную кнопку, но все равно зависает после нажатия этой отдельной кнопки!
Amorality вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 01:07.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!