我想尝试在blazor webassembly项目中使用ping类ping一些设备。我创建了如下代码。当我试图调试我的应用程序时,它总是在第一行完成执行,而不执行ping。发送方法。使用这种技术是否可以在浏览器中进行这样的操作?
@page "/test"
@using System.Net.NetworkInformation;
@using System.Text;
<link href="~/css/" rel="stylesheet" />
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<form>
<button class="btn btn-primary" @onclick="PingDevice">Click me</button>
</form>
@code {
private int currentCount = 0;
private void PingDevice()
{
try
{
Ping pingSender = new Ping();
PingOptions options = new PingOptions();
// Use the default Ttl value which is 128,
// but change the fragmentation behavior.
options.DontFragment = true;
// Create a buffer of 32 bytes of data to be transmitted.
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 120;
PingReply reply = pingSender.Send("192.168.0.1", timeout, buffer, options);
if (reply.Status == IPStatus.Success)
{
currentCount = 1;
}
else
{
currentCount = 0;
}
}
catch (Exception)
{
}
}
}
我想尝试在blazor webassembly中使用ping类ping一些设备项目
我认为那是不可能的。时期。
看,为了做到这一点,你需要一个套接字。这不是你可以从web组装中打开的东西。为了发出真正的ping,您必须输出ICMP数据包(并获得应答)。这在浏览器中根本无法实现。
https://github.com/WebAssembly/design/issues/1251
显示所以…
"然而,即使你可以使用现有的C/c++ api,它也会在内部使用WebSockets进行连接,所以你的服务器必须接受WebSockets。WebSockets只支持TCP。">
这使得PING和PING类无法使用。
https://www.linkedin.com/pulse/technical-due-diligence-wasm-ian-eyberg/
也表示这个。
"首先,asm不处理原始套接字。WASM只使用TCP的websockets,但这意味着你不能生成自己的TCP——你必须使用websockets。">
和
"原始套接字永远不会实现,因为这是一个巨大的安全问题。">
你可以在服务器端使用BLAZOR(因为在服务器端你是作为。net应用运行的),但不能在浏览器中使用webassembly。
如果有人有其他信息,请纠正我。