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