使用IdTcpClient和IdTcpServer组件传送图片时出错: Socket Error # 10061 Connection refused

Axrain 2005-10-28 10:37:40
在窗体上放入两个Image组件,分别作为发送和接收的图像.
放入IdTcpClient和IdTcpServer组件,定义IdTCPClient的Host:127.0.0.1,Port:9080; IdTCPServer的Port:9080

1 发送图片按钮的代码如下:

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'
...全文
1509 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yurenjf 2005-11-07
  • 打赏
  • 举报
回复
mark
Axrain 2005-10-31
  • 打赏
  • 举报
回复
多谢你
wizardqi 2005-10-31
  • 打赏
  • 举报
回复
是Indy包装错误,你把IdSocketHandle单元包含到uses 中。
wizardqi 2005-10-29
  • 打赏
  • 举报
回复
我是在一个程序里测试的,相信你略加改动C/S分开应该不难吧??
wizardqi 2005-10-29
  • 打赏
  • 举报
回复
晕倒,为避免一些我们设置的不一致性,我把设置的代码放在窗体构造过程里,发送和接收也给出来,你只用放上控件,写上事件即可,D7+W2000调试通过.
unit Unit1;

interface

uses
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.
Axrain 2005-10-29
  • 打赏
  • 举报
回复
但运行后出错:
type //类型定义部分出错
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);//这行出错,提示错误:
Undeclared identifier:'TIdSocketHandle'
不知什么原因?

各位朋友帮帮忙,小弟感谢
txhack 2005-10-29
  • 打赏
  • 举报
回复
前一个问题已经解决,多谢 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'
不知什么原因?
wizardqi 2005-10-28
  • 打赏
  • 举报
回复
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;
Axrain 2005-10-28
  • 打赏
  • 举报
回复
新的问题:

就是在同一窗体中传送字条串的程序:
窗口中的组件如下:"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'
不知什么原因?
Axrain 2005-10-28
  • 打赏
  • 举报
回复
前一个问题已经解决:
只是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'
不知什么原因?
phpco 2005-10-28
  • 打赏
  • 举报
回复
你好,我照您的代码改了,可是还提示如下错误:(这样的错误是连接失败吗?)
'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试过也不行,请问这是哪的原因呢?

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧