如果我使用创建套接字
var socket = new UdpClient(0,AddressFamily.InterNetwork);
那么我如何找到套接字的端口?
我可能很愚蠢,但我在 MSDN/Google 中没有运气(可能是因为星期五是 4:42 并且阳光明媚)。
背景:
我想要做的是找到一个开放的端口,然后报告给另一个进程在该端口上将消息转发给我。可能有多个客户端,所以我不想使用固定端口。
谢谢。
UdpClient 是 Socket 类的包装器,它通过 LocalEndPoint 属性公开它绑定到的端点。由于您使用的是 UDP/IP 客户端,因此它是一个 IPEndPoint,它具有所需的 Port 属性:
int port = ((IPEndPoint)socket.Client.LocalEndPoint).Port;
对于那些(像我一样)需要使用 RAW 套接字的人,这里是解决方法。
目标:
预期:(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;
}