Главная страница
    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.006 c
6-92150
EgorKA
2003-06-18 18:34
2003.08.28
TCPClient и обработка ошибок...


3-92075
IBSN
2003-07-30 18:54
2003.08.28
Графический редактор + MySql


3-92069
Berezne
2003-08-01 13:25
2003.08.28
Как вставить в новую запись данние не отображающиеся DBGrid???


14-92241
NIKKI
2003-08-09 21:56
2003.08.28
View this site.


3-92034
jack128
2003-08-04 14:39
2003.08.28
Выборка по дате





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