Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];

Вниз

PChar по сети   Найти похожие ветки 

 
mOOx_   (2003-08-10 13:53) [0]

Проблема вот в чем: есть значит PChar. На клиенте я формарую месагу в эту переменную, далее мне надо это сообщение перекинуть нежду ClientSocket и ServerSocket. Но не просто перекинуть, а в структуре следующего вида:

TPackageType = (ptMessage,ptAction);
TPackage = record
CommandType: TPackageType;
Length: LongInt;
Data: pointer;
end;

Заполнение структуры в клиенте:

GetMem(Pack,sizeof(TPackage));
Pack.CommandType:=ptMessage;
Mess:=PChar("сообщение"+#0);
Pack.Data:=Mess;
Pack.Length:=StrLen(Mess);
Socket.SendBuf(Pack^,sizeof(TPackage));
FreeMem(Pack,sizeof(TPackage));

Прием данных на сервере:

GetMem(Pack,sizeof(TPackage));
DM.SvrSock.Socket.Connections[0].ReceiveBuf(Pack^,Socket.ReceiveLength);
if Pack.CommandType=ptMessage then
begin
GetMem(Mess,Pack.Length);
Mess:=Pack.Data; <- Mess в отладчике вообще ничего не показывает
ShowMessage(Mess); ( Mess)
Проблема вот в чем: есть значит PChar. На клиенте я формарую месагу в эту переменную, далее мне надо это сообщение перекинуть нежду ClientSocket и ServerSocket. Но не просто перекинуть, а в структуре следующего вида:

TPackageType = (ptMessage,ptAction);
TPackage = record
CommandType: TPackageType;
Length: LongInt;
Data: pointer;
end;

Заполнение структуры в клиенте:

GetMem(Pack,sizeof(TPackage));
Pack.CommandType:=ptMessage;
Mess:=PChar("сообщение"+#0);
Pack.Data:=Mess;
Pack.Length:=StrLen(Mess);
Socket.SendBuf(Pack^,sizeof(TPackage));
FreeMem(Pack,sizeof(TPackage));

Прием данных на сервере:

GetMem(Pack,sizeof(TPackage));
DM.SvrSock.Socket.Connections[0].ReceiveBuf(Pack^,Socket.ReceiveLength);
if Pack.CommandType=ptMessage then
begin
GetMem(Mess,Pack.Length);
Mess:=Pack.Data; <- Mess в отладчике вообще ничего не показывает
ShowMessage(Mess); <- А тут вообще Access Violation
FreeMem(Mess);
end;
FreeMem(Pack);

Как бы так сделать, чтоб все было?


 
MBo   (2003-08-10 14:18) [1]

Ты пересылаешь указатель - 4 байта - в другом процессе он не имеет смысла.


 
mOOx_   (2003-08-10 14:23) [2]

Точно!!! Об этом я как-то не подумал :). И как теперь тогда что?


 
panov   (2003-08-10 14:30) [3]

Пересылай буфер, а не указатели, вот и все.


 
mOOx_   (2003-08-10 14:32) [4]

Это то я понял, тока мне обьявить что-то вроде

TPackage = record
CommandType: TPackageType;
Length: LongInt;
Data: TMemoryStream;
end;

???


 
MBo   (2003-08-10 14:40) [5]

Сначала передаешь заголовок, в котором указано количество байт данных, затем сами данные.


 
mOOx_   (2003-08-10 14:42) [6]

Так не интересно, я так и делал, хочу все в раз передать (вот и мудрю по этому :) ). Может это не возможно, конечно...


 
SPeller   (2003-08-10 15:23) [7]

TMyRec = record
Len: Integer;
Buf: array[ 0..50 ] of Char;
end;

в буфер записывай своё сообщение.


 
SPeller   (2003-08-10 15:24) [8]

И тегу где-то забыли проставить :)))


 
panov   (2003-08-10 15:27) [9]


Test


 
SPeller   (2003-08-10 16:12) [10]

Ещё тест.


 
SPeller   (2003-08-10 16:13) [11]

Теперь нормально.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
3-91990
New laymer
2003-08-06 11:00
2003.08.28
Ошибка при создании таблицы


14-92195
Карелин Артем
2003-08-11 09:57
2003.08.28
Ну и как теперь просмотреть свои вопросы??


6-92151
BillyJeans
2003-06-19 10:40
2003.08.28
Как найти всех доступных клиентов?


14-92256
Озабоченный
2003-08-11 15:52
2003.08.28
Легализация пиратской версии Делфи...


4-92294
miek
2003-06-29 10:08
2003.08.28
PerformanceTimer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский