我正在查看代碼,但我不確定其功能。我查看了這些功能的文檔,但他們沒有多少正義。這裏是代碼:澄清代碼
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_PORT
和BIND_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
使用,它是如何影響我的溝通?
如果您需要任何澄清,請問!
在此先感謝。
此處使用'm_remotehost':'m_sockBroadcast.SendTo(yCmdScan,m_remotehost);'這有幫助嗎? – Kcvin
'SCAN_PORT'應該是廣播消息發送到的端口。 –
你是對的!我嘗試了它,起初我遇到了一個錯誤,但是我增加了緩衝區大小,並且完美地接收了。 只是好奇,是否有辦法發送數據包到端口,並確定我試圖廣播到端口是否無法打開。如果它是開放的,我將能夠告訴我的用戶它正在使用。 – Kcvin