簡體   English   中英

使用UDP或其他低級技術使用Delphi向所有連接的計算機發送消息?

[英]Send message to all connected machines using Delphi using UDP or other low level technique?

我正在制作一個游戲,想立即與我的游戲服務器上的所有客戶交談。 (原始問題:如何列出IP,更新后的問題:如何進行UDP廣播。)

我想在播放器之間建立局域網連接。 現在,我不明白如何查找所有連接的計算機,以向其發送包含服務器信息的消息。 或者如何通過Synapse向所有人發送UDP?

枚舉局域網中的IP地址的完整列表是很困難的,至少不能在原始TCPIP級別上枚舉,這是您最初要求的(IP地址列表)。 然后,您更新了問題,詢問有關向所有連接的計算機發送消息的問題。 上面有一條評論建議使用NETSTAT info來執行此操作,但是我不確定這是否是您要執行的操作的可靠解決方案。

難以枚舉IP的原因1是許多連接的計算機根本不響應任何東西,包括Ping。 第二個問題是,如果您想枚舉當前網段中的計算機,則必須廣播到所有本地地址,這將花費很長時間,而且還不完整,因為您的局域網網段可能具有多個IP地址集,可能在幾個不同的私有IP子網以及一個或多個公共IP子網中。

如果您正在制作游戲,並且編寫了基於TCP的游戲服務器,則您的游戲服務器會知道當前連接到該服務器的用戶,並且您應該能夠進行活動會話。 對於Indy,ICS,Synapse或您用來編寫TCP / IP或UDP游戲協議服務器代碼的任何其他庫,執行此操作的代碼將有所不同。 您可以使用UDP廣播消息,但這可能不是某些游戲系統的正確解決方案。 假設您正在同一台計算機上運行兩台服務器,並且每台服務器都連接了一些播放器。 面向連接的解決方案更加強大。 您的客戶端可能仍然使用UDP,並且可能會輪詢與其連接的服務器,並通過協議中的標志接收事件通知。 這比嘗試多播或廣播到局域網要強大得多。

但是,如果您堅持要求,Synapse確實支持廣播語法:

 socket := TUDPBlockSocket.create;
 socket.enablebroadcast(true);
 socket.Connect('255.255.255.255', '12345')
 socket.SendBufferTo(@DATARECORD, SIZEOF(DATARECORD));

暫無
暫無

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

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