UdpClient 接收到 127.0.0.1 的数据包,但无法获取接口 IP 地址
UdpClient receives packets to 127.0.0.1 but fails to get them for interface IP address
当发送到环回接口的数据包被成功接收时,我有一个奇怪的问题,但是发送到本地网络接口的相同数据包丢失并且从未收到:
let test (local:IPEndPoint) =
Async.Parallel [
async {
use client = new UdpClient()
client.ExclusiveAddressUse <- false
client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true)
client.Client.Bind(local);
printfn "Listen: %A" local.Address
while true do
let mutable remote = local
client.Receive(&remote) |> ignore
printfn "%A: %A" local.Address remote.Address
};
async {
while true do
do! Async.Sleep 500
use senderUC = new UdpClient()
senderUC.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true)
senderUC.Send([|byte(1)|], 1, local) |> ignore
printfn "sent to %A" local
}
] |> Async.RunSynchronously
// this one works
test(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5353)) |> ignore
// this one does not
//test(new IPEndPoint(IPAddress.Parse("10.211.55.3"), 5353)) |> ignore
ipconfig:
C:\Users\Alex>ipconfig
Windows IP Configuration
Ethernet adapter vEthernet (Intel(R) PRO 1000 MT Network Connection Virtual Switch):
Connection-specific DNS Suffix . : localdomain
IPv4 Address. . . . . . . . . . . : 10.211.55.3
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.211.55.1
Wireshark 显示数据包发送(在重新路由到默认网关后)。
Windows防火墙已关闭。
我不知道要测试什么...
嗯,5353 是 Apple Bonjour 服务 (Zeroconf)。因此,虽然 Bonjour 是 运行,但它会在这些数据报到达客户端之前对其进行捕获。在服务中禁用它会将数据包泵送到我的应用程序。
当发送到环回接口的数据包被成功接收时,我有一个奇怪的问题,但是发送到本地网络接口的相同数据包丢失并且从未收到:
let test (local:IPEndPoint) =
Async.Parallel [
async {
use client = new UdpClient()
client.ExclusiveAddressUse <- false
client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true)
client.Client.Bind(local);
printfn "Listen: %A" local.Address
while true do
let mutable remote = local
client.Receive(&remote) |> ignore
printfn "%A: %A" local.Address remote.Address
};
async {
while true do
do! Async.Sleep 500
use senderUC = new UdpClient()
senderUC.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true)
senderUC.Send([|byte(1)|], 1, local) |> ignore
printfn "sent to %A" local
}
] |> Async.RunSynchronously
// this one works
test(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5353)) |> ignore
// this one does not
//test(new IPEndPoint(IPAddress.Parse("10.211.55.3"), 5353)) |> ignore
ipconfig:
C:\Users\Alex>ipconfig
Windows IP Configuration
Ethernet adapter vEthernet (Intel(R) PRO 1000 MT Network Connection Virtual Switch):
Connection-specific DNS Suffix . : localdomain
IPv4 Address. . . . . . . . . . . : 10.211.55.3
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.211.55.1
Wireshark 显示数据包发送(在重新路由到默认网关后)。
Windows防火墙已关闭。
我不知道要测试什么...
嗯,5353 是 Apple Bonjour 服务 (Zeroconf)。因此,虽然 Bonjour 是 运行,但它会在这些数据报到达客户端之前对其进行捕获。在服务中禁用它会将数据包泵送到我的应用程序。