Форум: "Сети";
Текущий архив: 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.009 c