使用C#

时间:2016-08-02 11:31:16

标签: c# gps gpsd

我正在使用连接到运行gpsd服务的覆盆子pi的gps。我试图使用TCP连接到服务但我无法让它工作。我也找不到任何关于它的文档。

这是我现在的代码:

  private static void Main(string[] args)
  {
        Console.WriteLine($"Trying to connect to {ServerAddress}...");
        var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        client.Connect(ServerAddress, 80);
        var result = new byte[256];
        client.Receive(result);
        Test();
  }

有人可以告诉我它是如何完成的,或者给我一个指向文档或c#示例的链接。

1 个答案:

答案 0 :(得分:1)

请查看此source中有关C示例的部分。

核心C客户端是套接字receiver

如果您需要功能齐全的客户端,我建议在我的初始评论中使用解决方法

  

您可以使用Raspberry Pi上的标准客户端并构建一个新客户端   Raspberry上的网络服务,你可以连接到更多的网络服务   标准方式来自c#“

C#Listener

否则你可以尝试创建一个基本的C#Listener:按照msdn How-To

public void createListener()
{
    // Create an instance of the TcpListener class.
    TcpListener tcpListener = null;
    IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
    try
    {
        // Set the listener on the local IP address 
        // and specify the port.
        tcpListener = new TcpListener(ipAddress, 13);
        tcpListener.Start();
        output = "Waiting for a connection...";
    }
    catch (Exception e)
    {
        output = "Error: " + e.ToString();
        MessageBox.Show(output);
    }
    while (true)
    {
        // Always use a Sleep call in a while(true) loop 
        // to avoid locking up your CPU.
        Thread.Sleep(10);
        // Create a TCP socket. 
        // If you ran this server on the desktop, you could use 
        // Socket socket = tcpListener.AcceptSocket() 
        // for greater flexibility.
        TcpClient tcpClient = tcpListener.AcceptTcpClient();
        // Read the data stream from the client. 
        byte[] bytes = new byte[256];
        NetworkStream stream = tcpClient.GetStream();
        stream.Read(bytes, 0, bytes.Length);
        SocketHelper helper = new SocketHelper();
        helper.processMsg(tcpClient, stream, bytes);
    }
}

整个详细的实施将超出范围。

附注

请记住,你需要在循环时睡觉。

可能更简单的解决方案

然而,乍一看,利用本机客户端绑定似乎更容易。

例如,gps_read()被描述为

  

阻止从守护程序读取数据。

这里的想法是从C#调用C++ wrapper并按照其他answer

中的描述编写客户端的单元操作