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

5

你好,让我清楚地表达我的问题。两个使用我的应用程序的人连接到互联网。他们彼此拥有对方的IP地址,并希望像Y!messanger一样相互聊天。 我认为我需要使用Indy组件,对吗? 我应该使用哪个组件?谢谢。

4个回答

4

你是否已经查看了Indy网站上的任何演示?


3

2
如果两个程序由用户直接控制,彼此拥有对方的IP地址,并希望作为平等的对等方直接交流,那就不是客户端/服务器模式,而是点对点模式,使其正常工作的技术也不同。 - Mason Wheeler

3
与Scott所说的类似,我认为你最大的问题是让它们互相交流。我家里的电脑通过路由器上网,该路由器阻止来自互联网的所有传入连接请求(即请求两台计算机之间启动对话),我的电脑可以发送连接请求和建立对话,但是除非你修改路由器(端口转发),否则我的电脑无法接收连接请求。
你需要一个服务器,双方都要连接到该服务器,然后在它们之间中继消息。为了更加巧妙,一旦与服务器建立了连接,两台计算机就可以直接联系,但这涉及到UDP数据包和一些聪明的技巧。

+1 是神奇的,但如果你想被评为最佳答案,你真的应该解释一下这个神奇的东西,比如NAT和路由... - NaN

2
您不必使用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客户端所做的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接