HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

отправка прием картинки Socket Server&Client Delphi
  #1  
Старый 22.05.2008, 12:24
Flame of Soul
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
С нами: 9980798

Репутация: 435
Отправить сообщение для Flame of Soul с помощью MSN
По умолчанию отправка прием картинки Socket Server&Client Delphi

отправляю:
PHP код:
       fs:=TMemoryStream.Create;
       
Image1.Picture.Bitmap.SaveToStream(fs);
       
ServerSocket1.Socket.SendStream(fs); 
принимаю:
PHP код:
procedure TForm1.Button1Click(SenderTObject);
begin
ClientSocket1
.Active:=true;
end;

procedure TForm1.Button2Click(SenderTObject);
begin
ClientSocket1
.Active:=false;
end;

procedure TForm1.ClientSocket1Read(SenderTObject;
  
SocketTCustomWinSocket);
  var
  
sstring;
begin
  s
:=Socket.ReceiveText;
  
Reciving:=true;
  
ClientSocket1.Socket.ReceiveBuf(s,DataSize);
  
fs.WriteBuffer(s,DataSize);
  
Image1.Picture.Bitmap.LoadFromStream(fs);
  
end
что не правильно в приеме
 
Ответить с цитированием

  #2  
Старый 22.05.2008, 17:41
x0man
Познающий
Регистрация: 24.02.2006
Сообщений: 34
С нами: 10635910

Репутация: 50
По умолчанию

картинка должна передаваться не сразу куском, а по блокам определённого размера...
и думаю стоит поменять s : string; на buf : array [0..1024] of byte;
и если учесть что TImage - это штука глючная, то лучше загружай картинку через TBitmap а потом уже рисуй её куданить на форму... ну или на жёсткий сохрани...
 
Ответить с цитированием

  #3  
Старый 22.05.2008, 18:13
Jes
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
С нами: 10037186

Репутация: 1462
По умолчанию

имхо тоже , лучше разбить по байтам , и имхо еще лучше сделать опознавательный байт в начале блока , чтобы пакеты картинки от других фильтровать ...
 
Ответить с цитированием

  #4  
Старый 22.05.2008, 18:29
x0man
Познающий
Регистрация: 24.02.2006
Сообщений: 34
С нами: 10635910

Репутация: 50
По умолчанию

Цитата:
Сообщение от Jes  
имхо тоже , лучше разбить по байтам
Зачем же разбивать, она итак отправляется по блокам... через SendBuf...

а вообще я делал так....

если передаём с сервера картинку, оповещаем клиента об её ожидании... посылая клиенту сообщение через SendText, 'imgXXXXXXXX'
где XXXXXXXX - размер картинки в HEX виде...
затем устанавливаем флаг (в клиенте) о приёме оной и занося в какую либо переменную размер картинки
RecvImage := True
ImageSize := XXXXXXXX

далее просто от общего размера, есстественно отнимаем то число, которое показывает размер блока что был принят...

ну и всё... вроде...

Последний раз редактировалось x0man; 22.05.2008 в 18:36..
 
Ответить с цитированием

  #5  
Старый 22.05.2008, 18:32
Jes
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
С нами: 10037186

Репутация: 1462
По умолчанию

это имхо (+ приверженство к hand made )
 
Ответить с цитированием

  #6  
Старый 22.05.2008, 18:36
desTiny
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
 
Ответить с цитированием

  #7  
Старый 22.05.2008, 18:37
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
С нами: 11099536

Репутация: 518
По умолчанию

2 Flame
не разбираясь в делфи!
>> s:=Socket.ReceiveText;
ноль ограниченный режим или чего это за шняга?


/// одним словом непохек работать с сокетом на высоком уровне!

Последний раз редактировалось Delimiter; 22.05.2008 в 18:46..
 
Ответить с цитированием

  #8  
Старый 22.05.2008, 23:33
t04
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
С нами: 10175096

Репутация: 105
По умолчанию

жесть. читай файл в буфер и просто высылай буфер. а вообще пора забыть эти TServerSocket & TClientSocket, юзай модуль WinSock.
 
Ответить с цитированием

  #9  
Старый 23.05.2008, 00:29
Hellsp@wn
Постоянный
Регистрация: 29.04.2007
Сообщений: 496
С нами: 10018466

Репутация: 588
По умолчанию

не используйте Stream'ы, это от лукавого пишите на апи - это хек! а строка под буфер, это нонсенс...

велком ->> http://www.delphikingdom.com/
 
Ответить с цитированием

  #10  
Старый 23.05.2008, 19:25
desTiny
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
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delphi smtp socket eroor 10080 anti_sec2 Болталка 3 09.05.2008 18:12



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.