我已經使用純套接字創建了自己的VOIP服務器和客戶端。所有的客戶端都可以發送語音數據到服務器,服務器可以收到音頻數據並且可以實時播放;但是如果客戶想要與特定客戶進行溝通呢?我怎麼做?如何將數據從一個客戶端發送到另一個客戶端?
編輯:例如,客戶端A連接到C(它是服務器),客戶端B連接到C.如何將數據發送到B(無論是否將數據發送到C)?
P.S.I可以顯示我的代碼,如果需要的話。或者如果我沒有具體告訴我,我會詳細說明我的問題。
我已經使用純套接字創建了自己的VOIP服務器和客戶端。所有的客戶端都可以發送語音數據到服務器,服務器可以收到音頻數據並且可以實時播放;但是如果客戶想要與特定客戶進行溝通呢?我怎麼做?如何將數據從一個客戶端發送到另一個客戶端?
編輯:例如,客戶端A連接到C(它是服務器),客戶端B連接到C.如何將數據發送到B(無論是否將數據發送到C)?
P.S.I可以顯示我的代碼,如果需要的話。或者如果我沒有具體告訴我,我會詳細說明我的問題。
A
連接到C
B
連接到C
A
問C
如果B
可用C
檢查,他可以爲BA
發送數據爲C
說它是B
C
將數據傳送到B
A
嘗試以後問C
如果B
可用謝謝,我認爲這將完美工作。如果我在使用這種方法時遇到問題,我會用一些源代碼發佈另一個問題。 –
非常好,如果你想要雙倍數據傳輸整體和傳輸時間+吃一些服務器的CPU時間 –
@LB:我認爲,因爲@DanielLopez調用'C'服務器和'A','B'客戶端,所有數據交換**必須**通過服務器。但是,如果'A'可以直接與'B'交談,那麼最好這樣做。不能在這裏提供最佳選擇的建議,需要對該項目進行更多描述。 – Otiel
您的服務器可以作爲協調器工作。 A
可以從您的服務器請求Client B's IP & listening port
,然後直接連接到該地址。
我正在使用TcpListener和TcpClient,我如何從TcpClient對象請求IP地址? –
@DanielLopez:爲此提出一個新問題。 – Otiel
您應該實施更高級別的協議。比如消息(例如,一個序列化的類)「詢問客戶的信息」,「返回信息」,「發送語音數據」等。我認爲你應該閱讀一些關於RPC的文檔。 http://en.wikipedia.org/wiki/Remote_procedure_call –
你問一個整個設計。我認爲你應該縮小你的問題範圍。 –