使两个Java应用程序在同一个LAN上相互识别

时间:2010-12-29 03:05:01

标签: java sockets networking

我在同一网络上的两台计算机上运行Java程序。我希望这些应用程序能够彼此了解,因此它们可以直接通信,而不是与服务器通信以中继消息。

我相信我可以找到解决方案,但是我无法找到任何比较我的解决方案的例子。你们知道这个问题通常是如何解决的吗?

3 个答案:

答案 0 :(得分:5)

有一个很好的库在http://jmdns.sourceforge.net/

的普通java中实现了Zeroconf / Bonjour标准

这基本上可以减轻您的协议负担,并允许您基于逻辑名称来广告和查找服务提供商(例如iTunes或Mac打印的内容)。

本书http://www.amazon.com/Zero-Configuration-Networking-Definitive-Guide/dp/0596101007解释了所有基本概念。

答案 1 :(得分:4)

你可以让他们在局域网环境中进行UDP多播,使用协议消息识别程序,然后拥有彼此身份的存储缓存,然后使用TCP连接并进行主要的消息交换(这比UDP)。或者,您只能根据需要继续使用UDP消息传递。

您可以在线搜索Java中的多播。

一些与多播相关的链接:

http://download.oracle.com/javase/1.4.2/docs/api/java/net/MulticastSocket.html

http://www.javafaq.nu/java-article817.html

您可以参考的好的多播聊天软件:

http://sourceforge.net/projects/mc2/

答案 2 :(得分:2)

一种方法是发送广播以查看谁在那里,然后实现GUI以向用户显示其他同伴在那里并提供连接选项。 (广播将为您提供每个人的IP地址。)

一旦知道要连接的人,只需打开一个TCP连接(或者如果它是时间关键的则使用UDP)并且你已经完成了。

顺便说一句,这是针对IPv4的 - IPv6没有广播(尽管类似)。