如果我創建使用如何查找分配給UDP客戶端(以.net/C#)的端口號?
var socket = new UdpClient(0,AddressFamily.InterNetwork);
我如何再找到插座端口的套接字?
我可能很笨拙,但我沒有MSDN/Google的運氣(可能是因爲它在星期五的4:42而太陽正在閃亮)。
背景:
我想要做的就是找到一個開放的端口,然後到另一個進程報告將郵件轉發到我在該端口上。可能有多個客戶端,所以我不想使用固定端口。
謝謝。
如果我創建使用如何查找分配給UDP客戶端(以.net/C#)的端口號?
var socket = new UdpClient(0,AddressFamily.InterNetwork);
我如何再找到插座端口的套接字?
我可能很笨拙,但我沒有MSDN/Google的運氣(可能是因爲它在星期五的4:42而太陽正在閃亮)。
背景:
我想要做的就是找到一個開放的端口,然後到另一個進程報告將郵件轉發到我在該端口上。可能有多個客戶端,所以我不想使用固定端口。
謝謝。
UdpClient是Socket類的一個包裝,它通過LocalEndPoint屬性公開了它綁定的端點。由於您使用的是UDP/IP客戶端這是一個IPEndPoint具有所需端口屬性:
int port = ((IPEndPoint)socket.Client.LocalEndPoint).Port;
對於那些(像我)誰需要使用原始套接字,這裏是解決辦法。
目標:
預期:(socket.LocalEndPoint爲IPEndPoint).Port
問題
解決方案:
警告:
local
IPEndPoint變量以瞭解端口,因爲套接字將始終報告爲零。代碼:
public Socket CreateBoundRawUdpSocket(ref IPEndPoint local)
{
if (0 == local.port)
{
Socket wasted = new Socket(local.AddressFamily,
SocketType.Dgram,
ProtocolType.Udp);
wasted.Bind(local);
local.Port = (wasted.LocalEndPoint as IPEndPoint).Port;
wasted.Close();
}
Socket goal = new Socket(local.AddressFamily,
SocketType.Raw,
ProtocolType.Udp);
goal.Bind(local);
return goal;
}
感謝。星期一早上我會執行這個第一件事。我錯過的是投到IPEndPoint,所以然後intellisense並沒有幫助我。:( – Chasler 2009-08-22 00:04:12
該死的......從來沒有想過...... thanx。:D – Cipi 2011-06-23 12:05:14
不幸的是,至少在.NET 4.0中,系統從不設置UDP套接字的端口字段,並且由於它是一個只讀屬性,你不能手動設置它 – 2014-09-25 18:57:22