Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.19;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
1-62153
Don
2003-12-06 16:53
2003.12.19
Помогите с WebBrowser1


14-62237
Ig
2003-11-25 21:57
2003.12.19
GPRS - кто пользовался?


3-61932
vlgrig1961
2003-11-26 08:28
2003.12.19
Помогите с UPPER в Oracle


6-62185
Dmitry V. Averuanov
2003-10-23 15:40
2003.12.19
Wake up on Lan


14-62282
Dimaxx
2003-11-24 01:22
2003.12.19
Дельфя 5 озверела...