你好,让我清楚地表达我的问题。两个使用我的应用程序的人连接到互联网。他们彼此拥有对方的IP地址,并希望像Y!messanger一样相互聊天。 我认为我需要使用Indy组件,对吗? 我应该使用哪个组件?谢谢。
一般来说,您希望创建一个“客户端/服务器”类型的应用程序。快速搜索“indy client server example”会得到很多结果,包括这个: http://www.devarticles.com/c/a/Delphi-Kylix/A-Real-World-Client-Server-Application-in-Delphi/。实际上,当您遇到具有私有IP地址的防火墙和NAT时,情况会变得更加复杂。您将不得不考虑您的应用程序如何绕过或通过这些类型的技术。
与Scott所说的类似,我认为你最大的问题是让它们互相交流。我家里的电脑通过路由器上网,该路由器阻止来自互联网的所有传入连接请求(即请求两台计算机之间启动对话),我的电脑可以发送连接请求和建立对话,但是除非你修改路由器(端口转发),否则我的电脑无法接收连接请求。你需要一个服务器,双方都要连接到该服务器,然后在它们之间中继消息。为了更加巧妙,一旦与服务器建立了连接,两台计算机就可以直接联系,但这涉及到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客户端所做的。