如何在c++builder6中发送广播消息
How can I send Broadcast message in c++ builder 6
我想知道如何为我的在线游戏绑定两台计算机。
我使用服务器套接字和客户端套接字制作了它,它很有效。但是,如果不知道这个程序在哪里运行,我怎么能做同样的事情呢。所以我无法连接,因为我不知道谁是服务器。有人告诉我可以发送广播信息,但现在已经是我无休止尝试的第三天了…
我试着这样写(c++builder6):
ClientSocket->Socket->SendText("Message");
地址和主机为192.168.0.255;我在一台电脑上同时运行了两次,但它不起作用(因为我不知道当时该怎么办)。
请帮我找到我事先不知道的服务器。
有人告诉我可以发送广播信息
这是一种方法,是的(这不是唯一的方法)。然而,只有当客户端PC和服务器PC连接到同一网络时,这才有效。
服务器应用程序可以打开两个侦听套接字,一个用于TCP,另一个用于UDP(仅限IPv4)或多播(IPv4或IPv6)。IPv6不支持UDP广播,因此您必须使用多播。
客户端应用程序可以:
-
对于UDP,使用连接到的子网的广播IPv4地址将消息发送到UDP端口。该消息将传递到连接到该子网的每个设备。如果服务器PC连接到同一个子网,并且服务器应用程序接收到广播消息,则它可以向发送广播的IPv4地址发回回复。当客户端应用程序收到回复时,它将知道发送回复的IPv4地址。
-
对于多播,订阅服务器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,它有TIdUDPClient
和TIdUDPServer
组件。或者,您可以直接使用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地址,您可以:
-
手动计算。使用
GetAdaptersInfo()
或GetAdaptersAddresses()
获取本地PC的当前IPv4地址和子网掩码,然后使用AND
运算符使用子网掩码的位来掩码IP地址的位,然后使用网络掩码的反位来OR
结果。 -
询问Windows。创建一个套接字并将其
bind()
到所需的本地网络适配器。然后使用CCD_ 10来查询与该网络相关联的广播IP地址。
- boost::进程间消息队列引发错误
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何通过参数抛出错误消息
- 从服务器传输到客户端的消息不会出现
- ROS2 动态消息模板
- 其中降频广播实际上是有用的
- C++秘密消息学校作业
- glad 导致 glfwSwapBuffers 返回错误消息
- C++入门 5 版:类消息和文件夹
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- UDP 客户端不会在 esp32 上广播消息
- 将权限设置为在多个台式机上广播消息
- 如何在c++builder6中发送广播消息
- 广播消息供所有进程退出 (MPI)
- 用广播系统消息杀死旧进程
- asio:存储要广播的消息的最佳方式
- 具有单消息和广播的c++客户机/服务器应用程序