![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача потоков по сети [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