社区
网络通信/分布式开发
帖子详情
Delphi中如何远程通讯?
internetroot
2008-02-22 07:29:37
Delphi中如何远程通讯?
如a.exe在苏州市发送一个字符串给在南京市的b.exe,在Delphi中如何实现,不知怎么下手。
...全文
293
7
打赏
收藏
Delphi中如何远程通讯?
Delphi中如何远程通讯? 如a.exe在苏州市发送一个字符串给在南京市的b.exe,在Delphi中如何实现,不知怎么下手。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
oushengfen
2008-02-26
打赏
举报
回复
Indy组件比较好
Alex-16888
2008-02-25
打赏
举报
回复
通过协议(tcp/udp)建立连接,用socket编程,发送信息
lyguo
2008-02-23
打赏
举报
回复
delphi 7 下有INDY 等一系统组件看一下它们的DEMO
songfuqiang
2008-02-23
打赏
举报
回复
用服务器中转,这样省事些!不用穿透防火墙.
forestry98
2008-02-22
打赏
举报
回复
要实现这个功能,方法很多,能够用的组件也很多,
但是涉及到的问题也是很多的,
选择 UDP 还是 TCP/IP、穿透防火墙、穿透网管、是否需要服务器..........
建议楼主先看看这方面的资料再决定如何下手。
以下是 Indy 官方发布,用 UDP 实现通讯的 Demo,楼主参考一下吧。
1.客户端
{-----------------------------------------------------------------------------
Demo Name: UDP Client
Author: <unknown - please contact me to take credit! - Allen O'Neill>
Copyright: Indy Pit Crew
Purpose:
History:
Date: 27/10/2002 01:00:36
Checked with Indy version: 9.0 - Allen O'Neill - Springboard Technologies Ltd - http://www.springboardtechnologies.com
-----------------------------------------------------------------------------
Notes:
Simple UDP client demo
}
unit UDPClientMain;
interface
uses
Windows, Messages, Graphics, Controls, Forms, Dialogs, IdWinsock2, stdctrls,
SysUtils, Classes, IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze,
IdComponent, IdUDPBase, IdUDPClient, IdStack;
type
TUDPMainForm = class(TForm)
SourceGroupBox: TGroupBox;
HostNameLabel: TLabel;
HostAddressLabel: TLabel;
HostName: TLabel;
HostAddress: TLabel;
UDPAntiFreeze: TIdAntiFreeze;
PortLabel: TLabel;
Port: TLabel;
DestinationLabel: TLabel;
DestinationAddress: TLabel;
BufferSizeLabel: TLabel;
BufferSize: TLabel;
UDPMemo: TMemo;
SendButton: TButton;
UDPClient: TIdUDPClient;
procedure FormCreate(Sender: TObject);
procedure SendButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
UDPMainForm: TUDPMainForm;
implementation
const
HOSTNAMELENGTH = 80;
RECIEVETIMEOUT = 5000; // milliseconds
{$R *.DFM}
procedure TUDPMainForm.FormCreate(Sender: TObject);
begin
Randomize; // remove if you want reproducible results.
HostName.Caption := UDPClient.LocalName;
HostAddress.Caption := GStack.LocalAddress;
Port.Caption := IntToStr(UDPClient.Port);
DestinationAddress.Caption := UDPClient.Host;
BufferSize.Caption := IntToStr(UDPClient.BufferSize);
UDPClient.ReceiveTimeout := RECIEVETIMEOUT;
end;
procedure TUDPMainForm.SendButtonClick(Sender: TObject);
var
MessageID: Integer;
ThisMessage: String;
ReceivedString: String;
begin
MessageID := Random(MAXINT);
ThisMessage := 'Message: ' + IntToStr(MessageID);
UDPMemo.Lines.Add('Sending ' + ThisMessage);
UDPClient.Send(ThisMessage);
ReceivedString := UDPClient.ReceiveString();
if ReceivedString = '' then
UDPMemo.Lines.Add('No response received from the server after ' + IntToStr(UDPClient.ReceiveTimeout) + ' millseconds.')
else
UDPMemo.Lines.Add('Received: ' + ReceivedString)
end;
end.
2.服务器端
{-----------------------------------------------------------------------------
Demo Name: UDP Server
Author: <unknown - please contact me to take credit! - Allen O'Neill>
Copyright: Indy Pit Crew
Purpose:
History:
Date: 27/10/2002 01:00:36
Checked with Indy version: 9.0 - Allen O'Neill - Springboard Technologies Ltd - http://www.springboardtechnologies.com
-----------------------------------------------------------------------------
Notes:
Simple UDP server demo
}
unit UDPServerMain;
interface
uses
Windows, Messages, Graphics, Controls, Forms, Dialogs, IdWinsock2, stdctrls,
SysUtils, Classes, IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze,
IdComponent, IdUDPBase, IdUDPClient, IdStack, IdUDPServer, IdSocketHandle;
type
TUDPMainForm = class(TForm)
SourceGroupBox: TGroupBox;
HostNameLabel: TLabel;
HostAddressLabel: TLabel;
HostName: TLabel;
HostAddress: TLabel;
UDPServer: TIdUDPServer;
UDPAntiFreeze: TIdAntiFreeze;
PortLabel: TLabel;
Port: TLabel;
BufferSizeLabel: TLabel;
BufferSize: TLabel;
UDPMemo: TMemo;
procedure FormCreate(Sender: TObject);
procedure UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;
var
UDPMainForm: TUDPMainForm;
implementation
const
HOSTNAMELENGTH = 80;
{$R *.DFM}
procedure TUDPMainForm.FormCreate(Sender: TObject);
begin
HostName.Caption := UDPServer.LocalName;
HostAddress.Caption := GStack.LocalAddress;
Port.Caption := IntToStr(UDPServer.DefaultPort);
BufferSize.Caption := IntToStr(UDPServer.BufferSize);
UDPServer.Active := True;
end;
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s: String;
begin
DataStringStream := TStringStream.Create('');
try
DataStringStream.CopyFrom(AData, AData.Size);
UDPMemo.Lines.Add('Received "' + DataStringStream.DataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort));
s := 'Replied from ' + UDPServer.LocalName + ' to "' + DataStringStream.DataString + '"';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s));
finally
DataStringStream.Free;
end;
end;
end.
lihuasoft
2008-02-22
打赏
举报
回复
有很多控件可以实现的。
你可以研究一下TServerSocket/TClientSocket控件(在Delphi6的Internet页下,Delphi7需要自行安装)
远程
屏幕高速传输与鼠标控制.rar_
delphi
远程
_屏幕传输_屏幕控制_
远程
_
远程
控制
远程
屏幕高速传输与鼠标控制,
delphi
通过及时
通讯
实现
即时
通讯
实时通信程序.rar
delphi
源码
这是一个自我感觉很好的通信程序,它的特点: 1.数据包格式全部自己定义。 所有的定义和通信核心类全部在COMM文件夹
中
。 2.能处理大量客户端同时通信的情况,客户和服务端共用相同的通信对象,并且可以实现互传。 3.通信细节全部封装在几个通用的类
中
,隐藏了交互通信的所有处理细节,如断包处理,超时重发等功能。 4.数据通信和数据具体应用完全分离,扩展性良好,本例
中
只做一个上传文件的例子,你可以在不用改动通信核心的情况下,可以实现
远程
控制所需的任何功能,并且不需要考虑通信细节
Delphi
XE10零基础实战快速入门
通过课堂上一个一个的实战例子,演示
Delphi
XE10的用法,最后通过一个完整的
通讯
录程序,让学员初步掌握软件开发的全部流程让零基础学员快速入门
Delphi
编程,快速掌握
Delphi
的使用方法,并能够制作出自己的软件来。为同学们下一步的提高打下坚实的基础。
可用于
远程
通讯
/文件操作的一对socket类
最近做一个
远程
监控/维护的
delphi
程序,针对发送接收数据和文件,包装了一下indy的两个socket类:idTcpServer和idTcpClient,自己感觉已经足够在大数据量、多连接的情况下使用,在发送数据间隔为2ms,30个client连接的情况下测试正常。希望这两个类大家能用得上。在使用
中
如果发现问题,请留言,谢谢!
Boost ASIO for
delphi
delphi
ASIO_mmzmagic本库是Boost ASIO for
delphi
的高效率稳定封装 做了8年多的
DELPHI
开发,还仍然在用D7,后续的
DELPHI
版本比如d2007,d2010还是非常很优秀的,有许多方便的功能和语法效率的改进。为啥不更换到新版本呢? 对于我来说究其原因还是因为
通讯
程序无法简单的做修改就移植到新版本上。 另外一个方面也是
DELPHI
本身没有较好的
通讯
库,INDY不稳定也不完善,不同版本也有些区别。开发起来四处抛异常的方式也让人很不爽。 研究了一些第三方
通讯
库,如ics系列dxsock系列,最后选择了dxsock,这样轻量级的库从稳定性还是易用性来说都比其它的要好用些。 不过这些库由于底层实现的方式都不能很好的支持大规模应用,由于后续支持的问题也不能支持
DELPHI
的新unicode版本。 C++由于有类似ACE、ASIO等等工业级的高性能稳定牛库的支持,c++的使用者们可以轻轻松松搞定很多难题而不用为并发连接数发愁。 为此经我研究决定封装底层基于IOCP(完成端口)实现的Boost::ASIO为
DELPHI
的底层
通讯
库,并且已经实现,
delphi
fans们大家有福啦 哈哈! 主要有以下几点好处: 1、支持大量并发( xp系统上测试可以支持到15000+的并发连接,付测试程序) 2、支持
delphi
的所有版本(d5以及以上版本都可以支持) 3、支持tcp服务端和客户端、异步
通讯
机制 4、在封装
中
自动高效处理粘包、异步
通讯
内存管理等较烦人的问题,也是容易导致不稳定的因素,提供外部使用的简明接口 5、最重要的是使用和开发都十分简单 :) FAQ: 我能用它做什么? 答:所有用到tcp
通讯
的地方你都可以用它。 用它封装的服务端或者客户端可以与其它控件或者是其它程序进行
通讯
吗? 答:可以,底层是标准tcp协议,不会有任何问题。 它有什么示例程序吗? 答:有专门的性能测试程序,也有
远程
数据库对象ADO版本以及UNIDAC版本的实际封装。 使用它是否需要支付费用?能否提供源代码? 答:完全免费使用,并且提供所有源码,我会做好后续更新为
delphi
的发展做点力所能及的贡献。 如果我对它进行了改进怎么联系作者? 答:QQ 22900104,马敏钊,邮箱 22900104@qq.com,QQ讨论群 15637473 欢迎加入讨论。 发布时客户端需要附带什么吗? 答:需要附带一个动态库“Svr_intf.dll”100k大小,由于是使用vs2005编译的boost库所以运行时机器上需要安装有微软的c++ vs2005运行库。
网络通信/分布式开发
1,593
社区成员
32,964
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章