отправка прием картинки Socket Server&Client Delphi |

22.05.2008, 12:24
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
С нами:
9980798
Репутация:
435
|
|
отправка прием картинки Socket Server&Client Delphi
отправляю:
PHP код:
fs:=TMemoryStream.Create;
Image1.Picture.Bitmap.SaveToStream(fs);
ServerSocket1.Socket.SendStream(fs);
принимаю:
PHP код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Active:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Active:=false;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s: string;
begin
s:=Socket.ReceiveText;
Reciving:=true;
ClientSocket1.Socket.ReceiveBuf(s,DataSize);
fs.WriteBuffer(s,DataSize);
Image1.Picture.Bitmap.LoadFromStream(fs);
end;
что не правильно в приеме
|
|
|

22.05.2008, 17:41
|
|
Познающий
Регистрация: 24.02.2006
Сообщений: 34
С нами:
10635910
Репутация:
50
|
|
картинка должна передаваться не сразу куском, а по блокам определённого размера...
и думаю стоит поменять s : string; на buf : array [0..1024] of byte;
и если учесть что TImage - это штука глючная, то лучше загружай картинку через TBitmap а потом уже рисуй её куданить на форму... ну или на жёсткий сохрани...
|
|
|

22.05.2008, 18:13
|
|
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
С нами:
10037186
Репутация:
1462
|
|
имхо тоже , лучше разбить по байтам , и имхо еще лучше сделать опознавательный байт в начале блока , чтобы пакеты картинки от других фильтровать ...
|
|
|

22.05.2008, 18:29
|
|
Познающий
Регистрация: 24.02.2006
Сообщений: 34
С нами:
10635910
Репутация:
50
|
|
Сообщение от Jes
имхо тоже , лучше разбить по байтам
Зачем же разбивать, она итак отправляется по блокам... через SendBuf...
а вообще я делал так....
если передаём с сервера картинку, оповещаем клиента об её ожидании... посылая клиенту сообщение через SendText, 'imgXXXXXXXX'
где XXXXXXXX - размер картинки в HEX виде...
затем устанавливаем флаг (в клиенте) о приёме оной и занося в какую либо переменную размер картинки
RecvImage := True
ImageSize := XXXXXXXX
далее просто от общего размера, есстественно отнимаем то число, которое показывает размер блока что был принят...
ну и всё... вроде...
Последний раз редактировалось x0man; 22.05.2008 в 18:36..
|
|
|

22.05.2008, 18:32
|
|
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
С нами:
10037186
Репутация:
1462
|
|
это имхо (+ приверженство к hand made )
|
|
|

22.05.2008, 18:36
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
С нами:
10139366
Репутация:
1502
|
|
Ещё, если уж потоки - это тру, то имхо (  ) лучше уж использовать TStrtingStream
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|

22.05.2008, 18:37
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
С нами:
11099536
Репутация:
518
|
|
2 Flame
не разбираясь в делфи!
>> s:=Socket.ReceiveText;
ноль ограниченный режим или чего это за шняга?
/// одним словом непохек работать с сокетом на высоком уровне! 
Последний раз редактировалось Delimiter; 22.05.2008 в 18:46..
|
|
|

22.05.2008, 23:33
|
|
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
С нами:
10175096
Репутация:
105
|
|
жесть. читай файл в буфер и просто высылай буфер. а вообще пора забыть эти TServerSocket & TClientSocket, юзай модуль WinSock.
|
|
|

23.05.2008, 00:29
|
|
Постоянный
Регистрация: 29.04.2007
Сообщений: 496
С нами:
10018466
Репутация:
588
|
|
не используйте Stream'ы, это от лукавого  пишите на апи - это хек! а строка под буфер, это нонсенс...
велком ->> http://www.delphikingdom.com/
|
|
|

23.05.2008, 19:25
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
С нами:
10139366
Репутация:
1502
|
|
Сообщение от Hellsp@wn
а строка под буфер, это нонсенс...
Ну почему ж:
Код:
setlength(s, 1024);
recv(тра-ля-ля, @s[1], 1024, тра-ля-ля);
s := PChar(s);
Разврат - это первый шаг на пути к ДАО! 
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|