使用Winsock扫描局域网游戏服务器

6
我在尝试使用Winsock来将我的游戏变成支持局域网玩的游戏。我已经阅读了一些Winsock文档,但我无法找出客户端如何获取在局域网中创建的所有游戏。
客户端必须尝试连接到局域网中的每个IP地址,例如尝试连接到192.168.0.1,然后是192.168.0.2等等吗?还有更好的方法吗?

请查看http://en.wikipedia.org/wiki/Broadcast_address。 - Will A
4个回答

3

2
通常这些游戏服务器使用本地UDP广播,只要客户端正在监听它,所有客户端都可以接收和处理它。
以下是我找到的一些示例客户端和服务器代码,可能对您有兴趣:http://visual-c.itags.org/visual-c-c++/29424/

2
我认为有两种可能的方法来实现这个。
  1. 创建一个“大厅”,客户端和服务器都可以连接到它,以便它们可以通过它找到彼此。

  2. 服务器广播UDP数据包。客户端监听并更新服务器列表。

如果你需要一种快速简单的方法,第二个选项是不错的选择,但请记住大部分UDP数据包只用于每个客户端使用一次,因此会浪费很多。

第一个选项是更通用和可扩展的解决方案,但可能需要更多时间来设计和实现。


0
首先,我建议你在进行任何网络开发时使用Wireshark。它可以显示数据包的传输情况,并让你看到其他游戏是如何实现的,因为有很多方法可以做到这一点。
使用UDP广播是其中一种方法。只需将目标IP地址的最后一个字节更改为255,就可以实现。

4
盲目更改最后一个字节并不总是有效的。这取决于网络上实际使用的子网掩码。正确的生成广播地址的方法是将本地计算机的IP与子网掩码“AND”运算,然后与子网掩码的反码进行“OR”运算。或者,可以直接使用全局广播地址255.255.255.255,但并非所有防火墙/路由器都允许其通过。 - Remy Lebeau

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