Форум: "Сети";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
ВнизОтправка пакетов Найти похожие ветки
← →
Maloj2007 © (2008-01-29 13:04) [0]Доброго времени суток!
Подскажите как провильно можно отправить пакет?
Ниже приведен код, но почему то не работает, все отправляется, но получить не могу.
Использую CodeGear 2007 и Компоненты TServerSocked/TClientSocked
На клиенте:
type
TPackedAuth = ^PPackedAuth;
PPackedAuth = record
UIN:string[6];
Password:String[32];
end;
TPacked = ^PPacked;
PPacked = packed record
CMD:Byte;
Data:Pointer;
end;
.....
procedure TClientAuthForm.AuthClick(Sender: TObject);
var
SendPacked:TPacked;
Auth:TPackedAuth;
begin
GetMem(Auth,SizeOf(PPackedAuth));
Auth.UIN:=UIN.Text;
Auth.Password:=MD5Print(MD5String(Password.Text));
GetMem(SendPacked,SizeOf(PPacked));
SendPacked.CMD:=10;
SendPacked.Data:=Auth;
Client.Socket.SendBuf(SendPacked^,SizeOf(PPackedAuth)+SizeOf(PPacked));
end;
На сервере
type
TPackedAuth = ^PPackedAuth;
PPackedAuth = record
UIN:string[6];
Password:String[32];
end;
TPacked = ^PPacked;
PPacked = packed record
CMD:Byte;
Data:Pointer;
end;
.....
procedure TServerForm.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
GetMem(ReadPacked,2048);
Socket.ReceiveBuf(ReadPacked^,2048);
if ReadPacked.CMD=10 then
begin
GetMem(Auth,SizeOf(PPackedAuth));
Auth:=ReadPacked.Data;
end;
Данные в пакете ReadPacked верные, но пакет Auth пустой :(
← →
Сергей М. © (2008-01-29 13:09) [1]Полное безобразие в коде)
← →
Maloj2007 © (2008-01-29 13:11) [2]Почему??? ПОдскажи плиз что подправить
← →
Maloj2007 © (2008-01-29 13:13) [3]Все проблема в том что может отправляться несколько видов пакетов, разного размера. Пакет вида TPackedAuth это пример
← →
Maloj2007 © (2008-01-29 13:20) [4]Сергей М
Подскажи плиз что изменить в коде?
← →
Сергей М. © (2008-01-29 13:22) [5]
> что подправить
Здесь не "подправлением" пахнет, а полной переработкой кода.
Начнем объявления типов:
> TPackedAuth = ^PPackedAuth
Почему не PPackedAuth = ^TPackedAuth ?
Префиксы T и P у имен идентификаторов несут вполне обоснованную смысловую нагрузку !
А ты ее поставил с ног на голову)
> PPackedAuth = record
Где packed ? Мыши съели ?)
Дальше.
> Data:Pointer;
Зачем партнеру по коннекту твой указатель в поле Data ? Он что с ним делать-то будет по получению ?
> Client.Socket.SendBuf(
Где анализ результата вызова ?
> Socket.ReceiveBuf(
Тоже самое - где анализ результата вызова ?
← →
Maloj2007 © (2008-01-29 13:28) [6]
> > Data:Pointer;Зачем партнеру по коннекту твой указатель
> в поле Data ? Он что с ним делать-то будет по получению
> ?
Т.е. на сколько я понимаю нужно описывать именно тип пакета?? А если типов пакетов несколько, то описывать каждый?
← →
Сергей М. © (2008-01-29 13:33) [7]
> нужно описывать именно тип пакета?? А если типов пакетов
> несколько, то описывать каждый?
>
Это уж ты сам решай.
Но я не об этом, а о том, что передача указателя в чужое адресное пространство в твоем случае лишено смысла.
← →
Slym © (2008-01-29 13:35) [8]type
TPackedAuth = packed record
CMD:Byte;
UIN:array[0..5] of char;
Password:array[0..31] of char;
end;
var
Auth:TPackedAuth;
begin
Auth.CMD:=10;
StrLCopy(Auth.UIN,PChar(UIN.Text),SizeOf(Auth.UIN));
StrLCopy(Auth.Password,PChar(MD5Print(MD5String(Password.Text))),SizeOf(Auth.Pas sword));
Client.Socket.SendBuf(Auth,SizeOf(Auth));
end;
← →
Slym © (2008-01-29 13:39) [9]
type
TPackedAuth = packed record
UIN:array[0..5] of char;
Password:array[0..31] of char;
end;
var CMD:Byte;
Auth:TPackedAuth;
begin
Socket.ReceiveBuf(CMD,SizeOf(CMD));
if CMD=10 then
Socket.ReceiveBuf(Auth,SizeOf(Auth));
end;
← →
Maloj2007 © (2008-01-29 13:41) [10]Slym
Спасибо, но тут одна проблеммка, в том что типов пакетов может быть несколько, а трафик у сервера не резиновый чтоб каждый раз передавать и получать лишние данные.
Вот потому и маюсь.
← →
Сергей М. © (2008-01-29 13:44) [11]
> трафик у сервера не резиновый
вот и начни его экономить с указания packed record
← →
Maloj2007 © (2008-01-29 13:45) [12]Slym
А... Вот теперь понял огромное спасибо за наводку, сейчас буду пробовать
← →
Slym © (2008-01-29 14:08) [13]Maloj2007 © (29.01.08 13:41) [10]
передавать и получать лишние
и чего я лишнего передал? ФСБ не видело и ладно :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c