【发布时间】:2010-11-30 19:30:30
【问题描述】:
嗨 让我把我的问题说清楚。使用我的应用程序的两个人已连接到互联网。两者都有彼此的 IP,并且他们想互相聊天(如 Y!messanger)。 我想我需要使用 Indy 组件;对?我应该使用哪个组件? 提前致谢
【问题讨论】:
嗨 让我把我的问题说清楚。使用我的应用程序的两个人已连接到互联网。两者都有彼此的 IP,并且他们想互相聊天(如 Y!messanger)。 我想我需要使用 Indy 组件;对?我应该使用哪个组件? 提前致谢
【问题讨论】:
您看过Indy's website 上的任何演示了吗?
【讨论】:
一般来说,您希望创建一个“客户端/服务器”类型的应用程序。在 Google 上快速搜索“indy 客户端服务器示例”会得到很多结果,包括这个:http://www.devarticles.com/c/a/Delphi-Kylix/A-Real-World-Client-Server-Application-in-Delphi/
实际上,当您拥有具有私有 IP 地址的防火墙和 NAT 时,这会变得更加复杂。您必须考虑您的应用程序将如何绕过或通过这些类型的技术。
【讨论】:
与 Scott 所说的类似,我认为您最大的问题是让他们互相交谈。我家中的计算机通过一个路由器,它会阻止来自 Internet 的所有传入连接请求(即开始两台计算机之间的对话的请求)。我的电脑可以向外发送连接请求,并以这种方式开始对话,但除非您修改路由器(端口转发),否则我的电脑无法接收连接请求。
您需要一个服务器,两个人都可以连接到该服务器,然后可以来回中继消息。更棘手的是,一旦与服务器建立连接,两台计算机就可以直接联系,但这涉及 UDP 数据包和一些巧妙的魔法。
【讨论】:
您不必使用 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客户会这样做。
【讨论】: