簡體   English   中英

如何在C ++ Builder 6中發送廣播消息

[英]How can I send Broadcast message in c++ builder 6

我想要的是知道如何為我的在線游戲綁定兩台計算機。

我使用服務器套接字和客戶端套接字來實現它,並且可以正常工作。 但是,如果不知道該程序在哪里運行,我該怎么做。 所以我無法連接,因為我不知道服務器是誰。 有人告訴我可以發送廣播消息,但現在是我無休止地嘗試進行廣播的第三天...

我試圖這樣寫(c ++ builder 6):

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地址。

如果兩台PC不在同一網絡上(即它們通過Internet連接),則以上內容不適用。 服務器必須將其當前IP地址發布到客戶端可以找到的某個位置,例如在公共網站或動態DNS服務上。

當然,最簡單的解決方案是僅向服務器管理員詢問服務器的當前TCP IP /端口,然后您可以根據需要將其輸入到客戶端應用程序的配置中。

我試圖這樣寫(c ++ builder 6):
ClientSocket-> Socket-> SendText(“ Message”);

TClientSocket使用TCP / IP。 要使用UDP發送子網廣播,您需要使用UDP組件。 C ++ Builder 6附帶有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子網,那么可以,您可以將UDP廣播消息發送到該IP地址。

要獲取子網廣播IP地址,您可以:

  1. 手動計算。 使用GetAdaptersInfo()GetAdaptersAddresses()獲取本地計算機的當前的IPv4地址和子網掩碼,然后使用的子網掩碼的比特的屏蔽IP地址的位AND運算符,然后OR結果與逆位網絡掩碼。

  2. 問Windows。 創建一個套接字,並將其bind()到所需的本地網絡適配器。 然后使用WSAIoctl(SIO_GET_BROADCAST_ADDRESS)查詢與該網絡關聯的廣播IP地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM