Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача потоков по сети [D7, WinXP]


Sen ©   (2004-01-02 15:26:00) 

Нужно написать программу для передачи изображения по сети. Картинку перегнать в поток элементарно, а как отправить по сети не знаю. Люди добрые, помогите!!!


Polevi   (2004-01-05 09:28:00) [1]

Data.Write(PChar(s)^,Length(s));
и [4]


Sen   (2004-01-05 07:57:00) [2]

Ну посоветуйте хоть что-нибудь


Sen   (2004-01-03 18:23:00) [3]

Data.Write(s[1],Socket.ReceiveLength); - я пробовал, не помогло.


Pat   (2004-01-03 18:09:00) [4]

Попробуй отправить какой-нибудь файл, получить его и сохранить в другой файл. Затем сравни. И как насчет Data.Write(s[1],Socket.ReceiveLength); ?


Sen   (2004-01-03 17:23:00) [5]

Я просмотрел текст который получаю в качестве потока и увидел там только цифру "9". При этом данные о длине потока передаются нормально. Так-же я испрбовал SendBuf, SendStream,ReceiveBuf,ReceiveText во всех комбинациях: не помогает.


Pat   (2004-01-03 15:39:00) [6]

Data := TMemoryStream.Create;
Запихни в procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
а то Data.Free; и при последующем чтении AV

Ну и try finally не помешает...


Pat   (2004-01-03 15:36:00) [7]

Data.Write(s [1],Socket.ReceiveLength);


Polevi   (2004-01-03 13:40:00) [8]

где анализ результата вызова SendBuf


Sen   (2004-01-03 13:16:00) [9]

Спасибо, но хотелось бы что нибудь для TClientSocket и TServerSocket.
У меня получилось вот что:
Data := TMemoryStream.Create;
...
procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
var s: string;
begin
s := Socket.ReceiveText;
Data.Write(s,Socket.ReceiveLength);
if Data.Size = DataSize then
begin
Data.Position := 0;
ScreenShot.Picture.Bitmap.LoadFromStream(Data);
Data.Free;
end;
end;

procedure TForm1.Send(Stm: TMemoryStream);
begin
ClientSocket.SendBuf(Stm,Stm.Size);
end;


В чём ошибка?


Rouse_   (2004-01-02 16:20:00) [10]

Вот примерно так:

procedure TFWUDPSocket.Send(const Host: String; Port: Integer;
Data: TMemoryStream);
var
Buffer: array of Char;
Result: Integer;
begin

try

if not Initialize(FClient, Host, Port) then Exit;

SetLength(Buffer, Data.Size);
Data.Position := 0;
Data.ReadBuffer(Buffer[0], Data.Size);

Result := SendTo(FClient, Buffer[0], Data.Size, 0, FSockAddr, SizeOf(FSockAddr));

if Result = SOCKET_ERROR then
Error(ERR_SEND + WSAErrorToString(WSAGetLastError));

finally

SetLength(Buffer, 0);
DeInitialize;

if WSAGetLastError <> 0 then Error(WSAErrorToString(WSAGetLastError));

end;

end;


Желаю успехов


Rouse_   (2004-01-02 16:18:00) [11]

SendBuf


Наверх

Титульная страница Поиск, карта сайта Написать письмо