如何在c++builder6中发送广播消息

How can I send Broadcast message in c++ builder 6

本文关键字:广播 消息 c++builder6      更新时间:2023-10-16

我想知道如何为我的在线游戏绑定两台计算机。

我使用服务器套接字和客户端套接字制作了它,它很有效。但是,如果不知道这个程序在哪里运行,我怎么能做同样的事情呢。所以我无法连接,因为我不知道谁是服务器。有人告诉我可以发送广播信息,但现在已经是我无休止尝试的第三天了…

我试着这样写(c++builder6):

ClientSocket->Socket->SendText("Message");

地址和主机为192.168.0.255;我在一台电脑上同时运行了两次,但它不起作用(因为我不知道当时该怎么办)。

请帮我找到我事先不知道的服务器。

有人告诉我可以发送广播信息

这是一种方法,是的(这不是唯一的方法)。然而,只有当客户端PC和服务器PC连接到同一网络时,这才有效。

服务器应用程序可以打开两个侦听套接字,一个用于TCP,另一个用于UDP(仅限IPv4)或多播(IPv4或IPv6)。IPv6不支持UDP广播,因此您必须使用多播。

客户端应用程序可以:

  1. 对于UDP,使用连接到的子网的广播IPv4地址将消息发送到UDP端口。该消息将传递到连接到该子网的每个设备。如果服务器PC连接到同一个子网,并且服务器应用程序接收到广播消息,则它可以向发送广播的IPv4地址发回回复。当客户端应用程序收到回复时,它将知道发送回复的IPv4地址。

  2. 对于多播,订阅服务器PC的多播组地址。服务器可以定期将其当前IP地址发送到组,订阅同一组的任何客户端都会收到该地址。当客户端收到消息时,它将知道发送消息的IP地址。

一旦客户端发现了服务器的IP地址,它就可以使用TCP端口将其TCP客户端套接字连接到该IP地址

如果这两台电脑不在同一个网络上(即通过互联网连接),则上述规定不适用。服务器必须在客户端可以找到的地方发布其当前IP地址,例如在公共网站或动态DNS服务上。

当然,最简单的解决方案是向服务器管理员询问服务器的当前TCPIP/端口,然后根据需要将其输入到客户端应用程序的配置中。

我试着这样写(c++builder6):
ClientSocket->Socket->SendText("Message");

TClientSocket使用TCP/IP。若要使用UDP发送子网广播,您需要使用UDP组件。C++Builder6附带了FastNet,它有一个TNMUDP组件,以及Indy,它有TIdUDPClientTIdUDPServer组件。或者,您可以直接使用WinSock API编写自己的UDP套接字代码。

Indy还提供多播

地址和主机为192.168.0.255

这是具有255.255.255.0子网掩码的IPv4 192.168.0.x子网的广播IP地址。如果这是您的实际子网配置,并且您的客户端和服务器PC都连接到192.168.0.x子网,那么是的,您可以向该IP地址发送UDP广播消息。

要获得子网广播IP地址,您可以:

  1. 手动计算。使用GetAdaptersInfo()GetAdaptersAddresses()获取本地PC的当前IPv4地址和子网掩码,然后使用AND运算符使用子网掩码的位来掩码IP地址的位,然后使用网络掩码的反位来OR结果。

  2. 询问Windows。创建一个套接字并将其bind()到所需的本地网络适配器。然后使用CCD_ 10来查询与该网络相关联的广播IP地址。