与服务器通信GPS / GPRS / GSM跟踪器

时间:2012-09-10 12:24:13

标签: gprs

我正在开发一种使用GPS / GPRS / GSM的车辆跟踪系统。我目前使用的跟踪设备是GV100,来自Quectel的GPS / GPRS / GSM跟踪器([www.quectel.com] [1]。) 我无法在设备和后端服务器之间建立连接。我的问题特别是:

  1. 如何从服务器向设备发送命令(AT命令)?
  2. 如何接受设备的响应(报告和确认消息)以将其保存在数据库中?
  3. 我使用MGV100管理工具(Quectel提供的软件)通过串口向设备发送命令。我在支持GSM的移动电话上收到了确认短信。现在,我想从服务器发送消息并接受服务器上的回复(而不是通过SMS)。我不知道如何发送命令并收到回复。我以前没有开发此类系统的经验。

    如果需要,我可以获得示例代码和设置过程。 我在哪里可以获得我提到的案例的相关教程?


    谢谢jhonkola


    为了理解服务器如何接收数据并将数据发送到设备,我决定首先实现客户端(目前是我的PC)和服务器之间的通信。虽然我的最终目标是与设备通信,但目前我正在尝试建立从PC到服务器的连接。如果我成功了,我将努力从需要服务器的IP地址和端口号的设备向服务器通信以发送和接收数据。
    这是我的假设如何做到:

    • 我可以从.cs代码打开服务器上的端口以进行通信 使用TCP / UDP。
    • 客户端可以通过此发送和接收数据 港口。
    • 我可以将客户端发送的数据保存在服务器的文件中 系统并随时查看。 (我没有将数据存储在关系数据库中,因为我现在不想打扰数据库问题。) 这就是我试图实施的方式:
      服务器C#Web应用程序:
      单击按钮时,它会打开一个端口并侦听客户端

      protected void btnConnect_Click(object sender, EventArgs e)
      {
          try
          {
              continueListening = true;
              while (continueListening)
              {
                  int port=Int32.Parse(txtPort.Text);
                  lblOutput.Text = "Port is now " + port +". Waiting for connection";
                  TcpListener myList = new TcpListener(IPAddress.Parse(txtIpAddress.Text), port);
                  myList.Start();
                  Socket s = myList.AcceptSocket();
                  lblOutput.Text="Connection accepted from " + s.RemoteEndPoint;
      
                  byte[] b = new byte[100];
                  int k = s.Receive(b);
                  lblOutput.Text = ("Recieved...");
                  String obtainedText = "";
                  for (int i = 0; i < k; i++)
                  {
                      obtainedText = obtainedText + "  " + (Convert.ToChar(b[i]));
                  }
                  writeToTextFile("C:/Users/MekAtIbex/Desktop/TESTED/RECIEVED.txt", obtainedText);
                  lblOutput.Text = obtainedText;
                  ASCIIEncoding asen = new ASCIIEncoding();
                  lblOutput.Text = lblOutput.Text +"  "+ ("The string was recieved by the server.");
                  lblOutput.Text = lblOutput.Text +"  "+ ("\r\nSent Acknowledgement");
              } 
      

    客户端:C#Windows应用程序

            private void btnSend_Click(object sender, EventArgs e)
            {
                try
                {
                    TcpClient tcpClient = new TcpClient();
                    int port=Int32.Parse(txtPort.Text.Trim());
    
                    tcpClient.Connect(txtIpAddress.Text, port);
                    lblStatus.Text = ("Connected");
                    Stream stm = tcpClient.GetStream();
                    ASCIIEncoding asen = new ASCIIEncoding();
                    byte[] bytesToSend = asen.GetBytes(txtData.Text);
                    lblStatus.Text = ("Transmitting.....");
    
                    stm.Write(bytesToSend, 0, bytesToSend.Length);
    
                    byte[] bb = new byte[100];
                    int k = stm.Read(bb, 0, 100);
    
                    for (int i = 0; i < k; i++)
                    {
                        txtaResponse.Text = txtaResponse.Text + "\n" + "Res... " + new DateTime() + " " + Convert.ToChar(bb[i]);
                        Console.Write(Convert.ToChar(bb[i]));
                    }
                    tcpClient.Close();
                }
    
                catch (Exception ex)
                {
                    lblStatus.Text = ("Connected");
                    txtaRequest.Text = txtaRequest.Text + "\n" + "Err... " + new DateTime() + " " + ex.StackTrace;
                }
            }
    

    我目前的问题是:

    1. 我的假设是否正确?如果不是我应该怎么做?
    2. 我试图使用上面的代码保存它,但我没有得到该文件。
    3. 在比较TCP中使用UDP跟踪应用程序的优缺点是什么? 我浏览得很好,但我找不到一个好的开始的地方。而且,由于我没有这些应用程序的经验,我无法调试我的应用程序。

2 个答案:

答案 0 :(得分:2)

很难全面回答这个问题,因为一个好的答案需要有关产品的详细知识。我建议您联系制造商/经销商寻求支持。

一些要点:

通过网络向设备发送命令要求您能够从互联网连接到设备。这在GSM网络上并不总是很容易,因为运营商可能会阻止所有传入的流量。制造商可能已经为此提供了解决方案。

如果您可以连接到设备,用于提供命令的协议(假设此类协议是内置的)也将包含接收任何响应的机制。

答案 1 :(得分:2)

  

我目前的问题是:

     

我的假设是否正确?如果不是我应该怎么做?

是的,您的基本假设是正确的。服务器将打开一个侦听端口,然后客户端可以连接到此端口并根据需要删除数据。您可以让服务器将此日志记录到文件中以供日后查看。

  

我试图使用上面的代码保存它,但我没有得到它   文件。

文件是否已创建?如果系统上不存在该文件,则您的方法将失败。

  

在比较TCP中使用UDP的优点和缺点是什么   用于跟踪应用程序?

UPD在网络设置方面较便宜。这是“快速而肮脏”的沟通方式。缺点是您可能无法正确传递所有消息。在某些应用中,这并不重要,并且这些成本的好处是值得的。

现在我要改变一些事情:

Change IPAddress.Parse(txtIpAddress.Text) to IPAddress.Any

这将使您的侦听器能够最广泛地捕获传入的消息,并且很可能不会影响其他系统(因为这基本上是您的第一个网络程序)。

你还想让你的监听器产生一个线程来处理文件写入,然后再回到监听。这是一种非常标准的做法,允许服务器处理多个连接。