我在Linux平台上使用dotnet核心,希望设置与CAN设备的通信。SocketCan在Linux平台上是可用的,但是有没有办法使用dotnet核心中的UnixDomainSocketEndPoint和Socket类来直接访问SocketCan呢?
在Linux (Debian9)环境下尝试使用此测试程序创建Socket实例时:
using System;
using System.Net.Sockets;
namespace SocketScan
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Scan for available ProtocolType values");
ScanForProtocolTypes(SocketType.Stream);
ScanForProtocolTypes(SocketType.Raw);
}
private static void ScanForProtocolTypes(SocketType socketType)
{
for (var i = 0; i < 1000000; i++)
{
try
{
var socket = new Socket(AddressFamily.Unix, socketType, (ProtocolType)i);
Console.WriteLine($"Succeeded creating socket with SocketType={socketType} ProtocolType={((ProtocolType)i)}");
}
catch (SocketException)
{ }
}
}
}
}输出为:
$ dotnet run SocketTest.csproj
Scan for available ProtocolType values
Succeeded creating socket with SocketType=Stream ProtocolType=Unspecified
Succeeded creating socket with SocketType=Stream ProtocolType=Icmp
Succeeded creating socket with SocketType=Raw ProtocolType=Unspecified
Succeeded creating socket with SocketType=Raw ProtocolType=Icmp枚举AdressFamily、SocketType和ProtocolType的哪个值将与SocketCan套接字匹配?
发布于 2020-02-17 16:10:36
在.NET核心3.0+上有AddressFamily.ControllerAreaNetwork和ProtocolFamily.ControllerAreaNetwork,而SocketCAN需要一个SocketType.Raw才能工作。在https://github.com/dotnet/corefx/pull/37315查看关联的拉取请求
https://stackoverflow.com/questions/57407957
复制相似问题