在窗体上放入两个Image组件,分别作为发送和接收的图像.
放入IdTcpClient和IdTcpServer组件,定义IdTCPClient的Host:127.0.0.1,Port:9080; IdTCPServer的Port:90801 发送图片按钮的代码如下:var
Temp:TMemoryStream;
begin
     Temp:=TMemoryStream.Create;
     Image1.Picture.Graphic.SaveToStream(Temp);
     IdTCPClient1.Connect();
     IDTCPClient1.WriteStream(Temp);
     IDTCPClient1.Disconnect();
     Temp.Free;end;2 IdTCPServer的OnExecute方法中写入:const
  TempImageFile='F:\haohao.jpg';
var
  t:TMemorystream;
begin
  t:=TMemorystream.create;
  AThread.Connection.ReadStream(t,-1,True);
  t.saveToFile(TempImageFile);
  Image2.Picture.LoadFromFile(TempImageFile);
  t.Free;
end;但我在编译时,一点发送就出错:
'Socket Error # 10061 Connection refused'

解决方案 »

  1.   

    1 发送图片按钮的代码如下:var
    Temp:TMemoryStream;
    begin
         Temp:=TMemoryStream.Create;
         Image1.Picture.Graphic.SaveToStream(Temp);
         IdTCPClient1.Connect();
         IdTCPClient1.OpenWriteBuffer;
         IDTCPClient1.WriteStream(Temp);
         IdTCPClient1.CloseWriteBuffer;
         IDTCPClient1.Disconnect();
         Temp.Free;end;2 IdTCPServer的OnExecute方法中写入:const
      TempImageFile='F:\haohao.jpg';
    var
      t:TMemorystream;
    begin
      t:=TMemorystream.create;
      AThread.Connection.ReadStream(t,-1,True);
      t.saveToFile(TempImageFile);
      Image2.Picture.LoadFromFile(TempImageFile);
      t.Free;
    end;
      

  2.   

    你好,我照您的代码改了,可是还提示如下错误:(这样的错误是连接失败吗?)
    'Socket Error # 10061 Connection refused'请问:
    IdTcpClient和IdTCPServer的设置有关系吗?我是这样设置的:IdTCPClient: Host:127.0.0.1,Port:9080; 
    IdTCPServer: Bindings的IP Address:127.0.0.1 ,Port:9080 ,(还有IP Address: All Port :Any都试过了不行),DefaultPort:9080试过也不行,请问这是哪的原因呢?
      

  3.   

    前一个问题已经解决:
    只是IdTCPUserver的 Port没设置好,不是代码的问题但与此相似的还有另一个问题:
    就是在同一窗体内发送文本的程序:
    窗口中的组件如下:"Edit","Memo","Bitbtn","IDUDPClient","IDUDPServer"
    具体操作:
    1、Bitbtn按钮:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
     IdUDPClient1.Send(Edit1.Text);
    end;2、IDUDPServer组件的 OnUDPRead中代码如下:procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
      var
        TempStream:TstringStream;
    begin
        TempStream:=TstringStream.Create('');
        TempStream.CopyFrom(AData,Adata.Size);
        Memo1.Lines.Add(TempStream.DataString);end;但运行后出错:
    type
      procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);//这行出错,提示错误:
    Undeclared identifier:'TIdSocketHandle'
    不知什么原因?
      

  4.   

    新的问题:就是在同一窗体中传送字条串的程序:
    窗口中的组件如下:"Edit","Memo","Bitbtn","IDUDPClient","IDUDPServer"具体代码:
    1、Bitbtn按钮:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
     IdUDPClient1.Send(Edit1.Text);
    end;2、IDUDPServer组件的 OnUDPRead中代码如下:procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
      var
        TempStream:TstringStream;
    begin
        TempStream:=TstringStream.Create('');
        TempStream.CopyFrom(AData,Adata.Size);
        Memo1.Lines.Add(TempStream.DataString);end;_______________________但运行后出错:
    type          //类型定义部分出错
      procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);//这行出错,提示错误:
    Undeclared identifier:'TIdSocketHandle'
    不知什么原因?
      

  5.   

    但运行后出错:
    type          //类型定义部分出错
      procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);//这行出错,提示错误:
    Undeclared identifier:'TIdSocketHandle'
    不知什么原因?各位朋友帮帮忙,小弟感谢
      

  6.   

    晕倒,为避免一些我们设置的不一致性,我把设置的代码放在窗体构造过程里,发送和接收也给出来,你只用放上控件,写上事件即可,D7+W2000调试通过.
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, IdTCPServer, IdBaseComponent, IdComponent,
      IdTCPConnection, IdTCPClient, ExtDlgs, jpeg;type
      TForm1 = class(TForm)
        OpenPictureDialog1: TOpenPictureDialog;
        IdTCPClient1: TIdTCPClient;
        IdTCPServer1: TIdTCPServer;
        Image1: TImage;
        Image2: TImage;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure IdTCPServer1Execute(AThread: TIdPeerThread);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      with IdTCPServer1,Bindings do
      begin
        Clear;
        Add.Port:=9080;
        Active:=True;
      end;
      With IdTCPClient1 do
      begin
        Host:='127.0.0.1';
        Port:=9080;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      Temp:TMemoryStream;
    begin
      if OpenPictureDialog1.Execute then
      begin
        Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
        Temp:=TMemoryStream.Create;
        Image1.Picture.Graphic.SaveToStream(Temp);
        IdTCPClient1.Connect;
        IDTCPClient1.WriteStream(Temp);
        IDTCPClient1.Disconnect;
        Temp.Free;
      end;
    end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    const
      TempImageFile='c:\haohao.jpg';
    var
      t:TMemorystream;
    begin
      t:=TMemorystream.create;
      AThread.Connection.ReadStream(t,-1,True);
      t.saveToFile(TempImageFile);
      Image2.Picture.LoadFromFile(TempImageFile);
      t.Free;
    end;
    end.
      

  7.   

    前一个问题已经解决,多谢 wizardqi(男巫)
    只是IdTCPUserver的 Port没设置好,不是代码的问题但与此相似的还有另一个问题:
    就是在同一窗体内发送字符串的程序:
    窗口中的组件如下:"Edit","Memo","Bitbtn","IDUDPClient","IDUDPServer"
    具体操作:
    1、Bitbtn按钮:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
     IdUDPClient1.Send(Edit1.Text);
    end;2、IDUDPServer组件的 OnUDPRead中代码如下:procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
      var
        TempStream:TstringStream;
    begin
        TempStream:=TstringStream.Create('');
        TempStream.CopyFrom(AData,Adata.Size);
        Memo1.Lines.Add(TempStream.DataString);end;但运行后出错:
    type
      procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);//这行出错,提示错误:
    Undeclared identifier:'TIdSocketHandle'
    不知什么原因?
      

  8.   

    是Indy包装错误,你把IdSocketHandle单元包含到uses 中。