如何通过互联网在两个delphi应用程序之间传输数据?

问题描述:

嗨 让我让我的问题清楚。两个人使用我的应用程序连接到互联网。两个人都有对方的IP,他们想与对方聊天(如Y!messanger)。 我想我需要使用Indy组件;对?我应该使用哪个组件? 在此先感谢如何通过互联网在两个delphi应用程序之间传输数据?

通常,您正在创建一个“客户端/服务器”类型的应用程序。快速Google搜索“indy客户端服务器示例”会得到很多结果,其中包括:http://www.devarticles.com/c/a/Delphi-Kylix/A-Real-World-Client-Server-Application-in-Delphi/

实际上,当您使用私有IP地址的防火墙和NAT时,这会变得复杂得多。你将不得不考虑你的应用程序如何绕过或通过这些类型的技术。

+0

+1对于一剂现实。防火墙,代理,NAT。 – 2010-11-30 20:24:48

+1

如果两个程序都是由用户直接控制的,互相拥有对方的IP,并且想要直接对话,那不是客户/服务器;这是点对点的,而使它工作的技术是不同的。 – 2010-11-30 21:19:10

你看过Indy's website的任何演示了吗?

您不必使用Indy组件,只需要处理通过网络进行通信的任何内容。任何HTTP或套接字网络堆栈都可以。 Indy是Delphi Win32的事实标准。

要进行网络通信,您需要在机器A上创建一个侦听器对象或服务,并在机器B上创建一个发送者对象,以便将一条网络消息从A发送到B.要将消息从B发送到A,您将还需要一个反向路径 - 共有4个对象执行双向通信。一些对象包装器在内部隐藏了这个细节。我不记得Indy是否隐瞒了这一点。

如果您的计算机使用通用TCP/IP协议来加工通信(如HTTP),它可能会最容易。这将使得通过任意用户之间经常存在的防火墙和代理获得连接变得更加容易。为了避免与任何一台机器上运行的任何HTTP Web服务发生冲突,您应该使用IP地址为192.168.1.10:12345的自定义端口号,而不是标准的HTTP Web服务器端口80.这是大多数IM客户做的。

与斯科特说的相似,我认为你最大的问题是让他们互相交谈。我家里的电脑通过一台路由器,它阻止来自Internet的所有传入连接请求(即请求在两台计算机之间开始对话)。我的电脑可以发送连接请求OUT,并以这种方式开始对话,但除非您修改路由器(端口转发),否则我的计算机无法接收连接请求。

您需要一个服务器连接到两个人,然后可以来回中继消息。为了变得非常棘手,一旦与服务器建立连接,两台计算机可以直接联系,但涉及UDP数据包和一些聪明的魔法。