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

Вниз

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

 
Vitalik   (2003-10-23 11:26) [0]

Здравствуйте!
У меня проблема с TClientSocket/TServerSocket!
Я ни как не могу послать из TClientSocket данные в TMemoryStream и не могу принять их в TServerSocket.

отсылаю данные так:
ClientSocket.port:=20000;
ClientSocket.ClientType:=ctBlocking;

***
var
strm: TMemoryStream;
d: integer;
begin
d:=123;
strm:=tmemoryStream.create;
strm.write(d, SizeOf(d) );
ClientSocket.Socket.SendStream(Strm);
end;

Ну тут вроде всё получается, т.е. никаких ошибок.

принимаю данные так:

ServerSocket.port:=20000;
ServerSocket.ServerType:=stNonBlocking;

***

Ну в общем, первый вопроос: а какое, событие нужно обрабатывать, чтобы получить этот поток данных? Например, OnClientRead не срабатывает. А вообще, получать эти данные нужно примерно так?:

ServerSocket.Socket.ReceiveBuf...
?

Вот.
Либо у это я что-то не так делаю, что у меня OnCLientRead не срабатывает (ведь когда отсылаешь данные ч/з SendText или SendBuf, то оно же срабатывает), либо его нужно как-тоо по-другому получать?!!

У меня более или менее получается получать и принимать текст и буферы, а вот со Stream ника...

Спасибо!


 
Polevi   (2003-10-23 11:33) [1]

strm.Position:=0;


 
Vitalik   (2003-10-23 13:51) [2]

Спасибо, Polevi! Действительно, теперь данные передаются. Но у меня возникли некоторые проблемы при получении данных...

Обрабатываем событие ClientRead:
procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
l: Integer;
buf: PChar;
d: integer;
begin
l:=Socket.ReceiveLength;
getmem(buf, l);
Socket.ReceiveBuf(buf, l);
d:=Integer(buf);
ListBox1.Items.Insert(0, format("пришло байт=%d; данные=%d", [l, d]));
FreeMem(buf); //Вот тут у меня происходит ошибка Access violation... Почему?

end;

Т.е. данные, то получаю нормально, но вот ошибка почему происходит?


 
Polevi   (2003-10-23 14:33) [3]

сил больше нет объяснять одно и тоже, поищи в этом разделе форума по слову Digitman - тебе будет полезно почитать


 
Polevi   (2003-10-23 14:40) [4]

вот к примеру
http://delphimaster.net/view/6-1064824067/


 
Digitman   (2003-10-23 14:43) [5]


> Polevi


думаешь, у меня их много, сил-то ?)
тоже не предел есть)

тотальное и печальное незнание Паскаля( ...


> Vitalik



> FreeMem(buf); //Вот тут у меня происходит ошибка Access
> violation... Почему?


потому что ты даже не удосужился взглянуть на декларацию ф-ции ReceiveBuf()

а она в твоем случае требует для передачи в кач-ве факт.параметра адреса буфера именно адрес буфера, а не адрес переменной, хранящей адрес буфера !

разыменование нужно !

Socket.ReceiveBuf(buf ^, l);


 
Vitalik   (2003-10-23 19:30) [6]

Ну понятно ;)
Спасибо за науку :)
Извините за испорченные нервы :)



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

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

Наверх





Память: 0.46 MB
Время: 0.008 c
1-62047
Y2003
2003-12-06 00:25
2003.12.19
Прблема с Ntdll.dll


1-62058
_юзер_
2003-12-05 17:05
2003.12.19
ActionMainMenuBar


1-62010
James1981Bond
2003-12-07 00:19
2003.12.19
Ошибка при работе со свойствами..........


3-61921
Фагот
2003-11-27 10:46
2003.12.19
Проблема поиска


1-62112
Psi-factor
2003-12-08 10:22
2003.12.19
Webbrowser открыть страницу во фрейме





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