Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
1-1208189486
Бэтман
2008-04-14 20:11
2009.03.29
Компонент tRadioGroup


2-1234260141
Игорь
2009-02-10 13:02
2009.03.29
MOUSEHOOKSTRUCT


1-1208202474
aha
2008-04-14 23:47
2009.03.29
Как можно выполнить такое ? Для сохранения параметров программы


2-1233922041
КирилЛ
2009-02-06 15:07
2009.03.29
Как узнать "автономер" сохраняемой записи?


15-1232663571
Германн
2009-01-23 01:32
2009.03.29
Ну вот ещё один продукт наших студентов.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский