[英]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廣播,因此您必須使用多播。
然后,客戶端應用可以:
對於UDP,請使用它所連接的子網的廣播IPv4地址將消息發送到UDP端口。 該消息將傳遞到連接到該子網的每個設備。 如果服務器PC連接到相同的子網,並且服務器應用程序接收到廣播消息,則它可以將答復發送回發送廣播的IPv4地址。 當客戶端應用收到回復時,它將知道發送回復的IPv4地址。
對於多播,請訂閱服務器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 (具有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子網,那么可以,您可以將UDP廣播消息發送到該IP地址。
要獲取子網廣播IP地址,您可以:
手動計算。 使用GetAdaptersInfo()
或GetAdaptersAddresses()
獲取本地計算機的當前的IPv4地址和子網掩碼,然后使用的子網掩碼的比特的屏蔽IP地址的位AND
運算符,然后OR
結果與逆位網絡掩碼。
問Windows。 創建一個套接字,並將其bind()
到所需的本地網絡適配器。 然后使用WSAIoctl(SIO_GET_BROADCAST_ADDRESS)
查詢與該網絡關聯的廣播IP地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.