我正在开发一个使用 GPS/GPRS/GSM 的车辆跟踪系统。我目前使用的跟踪设备是 GV100,这是一款来自 Quectel ([www.quectel.com][1]) 的 GPS/GPRS/GSM 跟踪器。我无法在设备和后端服务器之间建立连接。我的问题特别是:
- 如何从服务器向设备发送命令(AT 命令)?
- 如何接受来自设备的响应(报告和确认消息)以将其保存在数据库中?
我使用 MGV100 管理工具(移远通信提供的软件)通过串口向设备发送命令。我在支持 GSM 的手机上收到了确认短信。现在,我想从服务器发送消息并在服务器上接受回复(不是通过短信)。我不知道如何发送命令和接收回复。我以前没有开发此类系统的经验。
如果需要的话,如果我能得到一个示例代码和设置程序,那就太好了。我在哪里可以获得我提到的案例的相关教程?
谢谢 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;
}
}
我目前的问题是:
- 我的假设正确吗?如果不是我应该怎么做?
- 我尝试使用上面的代码保存它,但我没有得到文件。
- 与 TCP 相比,使用 UDP 跟踪应用程序的优点和缺点是什么?我浏览得很好,但我找不到一个好的开始。而且,由于我没有使用此类应用程序的经验,因此无法调试我的应用程序。