2012-06-22 219 views
0

我正在查看代碼,但我不確定其功能。我查看了這些功能的文檔,但他們沒有多少正義。這裏是代碼:澄清代碼

private void m_InitUdpSock() 
    { 
     m_sockBroadcast = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     m_sockBroadcast.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast,1); 

     m_localhost  = new IPEndPoint(IPAddress.Parse(m_localHostIP),BIND_PORT); 
     m_remotehost = new IPEndPoint(IPAddress.Broadcast,SCAN_PORT); 

     m_sockBroadcast.Bind(m_localhost); 
     m_sockBroadcast.BeginReceiveFrom(m_rxBuffer,0,m_rxBuffer.Length,SocketFlags.None,ref m_HostEp,new AsyncCallback(ReceiveBroadcastData),m_sockBroadcast); 
    } 

從我所理解的:這個函數是設置一個套接字廣播UDP消息。它使用m_localhost發送廣播。所述m_localhost用於爲:

m_localhost  = new IPEndPoint(IPAddress.Any,BIND_PORT); 

然後,我想select the Network Adapter我選擇與其進行通信,所以檢索到的網絡適配器的IP地址我想用,改變了m_localhost第一示例。然後使用Bind函數,它應該使用特定的網絡適配器,並使用端口BIND_PORT來偵聽respoonse消息。

我希望有人可以確認我確實使用IP的網絡適配器我通過本地主機。

m_remotehost只是一個IPEndPoint,它將保存響應的數據包的IP地址,並將端口SCAN_PORT作爲輸出廣播端口。

SCAN_PORTBIND_PORT有以下開發人員的評論;但是我不知道他們是否準確。 m_remotehost是否指定了它應該用來與我通信的端口? (這聽起來像不好的做法對我來說)

SCAN_PORT // Outgoing broadcast port. 
BIND_PORT // Incoming response listen port. 

接下來,在BeginReceiveFrom,該文件是明確的大部分,但是該參數用於「參考HostEp」以前開發商扔我,因爲它是聲明:

m_HostEp = new IPEndPoint(IPAddress.Any,0); 

所以當我打電話BeginReceiveFrom,它仍然使用任何本地IP地址廣播消息,這不是我想要的嗎? m_HostEp也用於撥打EndReceiveFrom(iar,ref m_HostEp)

我在尋找澄清:
SCAN_PORT
2.什麼是m_HostEp使用,它是如何影響我的溝通?

如果您需要任何澄清,請問!

在此先感謝。

回答

1

查看代碼片段,不使用m_remotehost,因此您無法從中確定SCAN_PORT的含義,但顯然廣播消息可以在接收到的一個不同端口上發送。

  • BIND_PORT是您將收到消息的端口。
  • m_HostEp將包含您收到的消息的發件人的EndPoint

當學習插座我讀http://tangentsoft.net/wskfaq/這竟然是一個很好的參考,如果你想了解更多關於廣播網「引擎蓋下」的東西可能會非常棘手。但它並不是專門針對c#的。

+0

此處使用'm_remotehost':'m_sockBroadcast.SendTo(yCmdScan,m_remotehost);'這有幫助嗎? – Kcvin

+0

'SCAN_PORT'應該是廣播消息發送到的端口。 –

+0

你是對的!我嘗試了它,起初我遇到了一個錯誤,但是我增加了緩衝區大小,並且完美地接收了。 只是好奇,是否有辦法發送數據包到端口,並確定我試圖廣播到端口是否無法打開。如果它是開放的,我將能夠告訴我的用戶它正在使用。 – Kcvin