Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача картинки, Сокеты 
:(
    Опции темы
Exai1e
Дата 22.10.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: нет
Всего: 30



Здрасти, возникла такая проблема, взял для пробы пример из фака

Клиент:
Код

unit uClientMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, ToolWin, ComCtrls, Menus, ScktComp, Sockets, ExtCtrls,
  ExtDlgs, StdCtrls, jpeg;

type
  TfrmMainClient = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    ToolBar1: TToolBar;
    btnConnect: TSpeedButton;
    btnSend: TSpeedButton;
    StatusBar1: TStatusBar;
    ClientSocket1: TClientSocket;
    imgMainClient: TImage;
    OpenPictureDialog1: TOpenPictureDialog;
    edtAdress: TLabeledEdit;
    edtPort: TLabeledEdit;
    procedure btnConnectClick(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
    Reciving: boolean;  
    DataSize: integer;
    Data: TMemoryStream;
  public
    { Public declarations }
  end;

var
  frmMainClient: TfrmMainClient;

implementation

{$R *.dfm}

procedure TfrmMainClient.btnConnectClick(Sender: TObject);
begin
  ClientSocket1.Host := edtAdress.Text;
  ClientSocket1.Port := StrToInt(edtPort.Text);
  ClientSocket1.Active := true;
end;

procedure TfrmMainClient.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Socket.SendText('send'); 
end;

procedure TfrmMainClient.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var  
  s, sl: string;  
begin  
  s:= Socket.ReceiveText;  
  if not Reciving then  
  begin
    SetLength(sl, StrLen(PChar(s))+1);
    StrLCopy(@sl[1], PChar(s), Length(sl)-1);
    DataSize:= StrToInt(sl);
    Data:= TMemoryStream.Create;
    Delete(s, 1, Length(sl));  
    Reciving:= true;  
  end;
  try  
    Data.Write(s[1], length(s));  
    if Data.Size = DataSize then  
    begin  
      Data.Position:= 0;
      imgMainClient.Picture.Bitmap.LoadFromStream(Data); 
      Data.Free;  
      Reciving:= false;  
      Socket.Close;
      Data.SaveToFile('C:\Test.jpeg');  //О байт      
    end;  
  except
    Data.Free;  
  end;  
end;

end.


Сервер:
Код

unit uServerMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, Buttons, ToolWin, ComCtrls, StdCtrls, ExtCtrls, ScktComp, Sockets,
  jpeg;

type
  TfrmMainServer = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    edtAdress: TLabeledEdit;
    edtPort: TLabeledEdit;
    ToolBar1: TToolBar;
    btnStartServer: TSpeedButton;
    StatusBar1: TStatusBar;
    btnStopServer: TSpeedButton;
    ServerSocket1: TServerSocket;
    imgMainServer: TImage;
    procedure FormCreate(Sender: TObject);
    procedure btnStopServerClick(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure btnStartServerClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMainServer: TfrmMainServer;

implementation

{$R *.dfm}

function GetMyLocalIP: String;
var
  Socket: TIpSocket;
begin
  Socket:= TIpSocket.Create(nil);
    try
      Result:= Socket.LocalHostAddr;
    finally
  Socket.Free;
end;
end;


procedure TfrmMainServer.btnStartServerClick(Sender: TObject);
begin
  edtAdress.Text := GetMyLocalIP;
  ServerSocket1.Port := StrToInt(edtPort.Text);
  ServerSocket1.Active := true;
  ShowMessage('Go!'); 
end;

procedure TfrmMainServer.btnStopServerClick(Sender: TObject);
begin
  ServerSocket1.Active := false;
end;

procedure TfrmMainServer.FormCreate(Sender: TObject);
begin
  edtAdress.Text := GetMyLocalIP;
end;

procedure TfrmMainServer.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  ms : TMemoryStream;
begin
  if Socket.ReceiveText = 'send' then
    begin
      ms:= TMemoryStream.Create;
        try
          imgMainServer.Picture.Bitmap.SaveToStream(ms);
          ms.Position:= 0;
          Socket.SendText(IntToStr(ms.Size) + #0);
          Socket.SendStream(ms);
          ms.SaveToFile('C:\serv.jpeg'); //тоже сохраняется 0 байт
        except
      ms.Free;
    end;
  end;
  end;
end.


в чем может быть проблема ?

И еще вопросик - получаеться что фаил с сервера отправляеться к клиенту, а можно ли сделать так чтобы от клиента к клиенту можно было кидать картинки ?
а Сервер просто так был запущен

Это сообщение отредактировал(а) Exai1e - 22.10.2007, 23:17


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Mikh@il
Дата 23.10.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Разбей файлик свой на куски по 255 байт и кидай на сервер, а на сервере потом собирай!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.