2012-09-10 3 views
3

GPS/GPRS/GSM을 사용하는 차량 추적 시스템을 개발 중입니다. 현재 사용중인 추적 장치는 Quectel의 GPS/GPRS/GSM 추적기 인 GV100입니다. [www.quectel.com] 장치와 백엔드 서버간에 연결을 설정할 수 없습니다. 제 질문은 특히 :서버와 GPS/GPRS/GSM 트래커 통신

  1. 서버에서 장치로 명령을 보내려면 어떻게해야합니까?
  2. 장치에서 응답 (보고서 및 수신 확인 메시지)을 받아 데이터베이스에 저장하려면 어떻게합니까?

직렬 포트를 통해 MGV100 관리 도구 (Quellel에서 제공하는 소프트웨어)를 사용하여 장치에 명령을 보냈습니다. 그리고 나는 GSM 휴대 전화에서 SMS 메시지를 받았다. 이제 서버에서 메시지를 보내고 SMS가 아니라 서버에서 응답을 받겠습니다. 나는 명령을 보내고 답장을받는 방법을 모른다. 나는 그러한 시스템을 개발하는 데있어 이전의 경험이 없다.

필요한 경우 샘플 코드와 설정 절차를 얻을 수 있다면 좋을 것입니다. 내가 언급 한 사례에 대한 관련 자습서는 어디에서 얻을 수 있습니까?


덕분에 내가 먼저 클라이언트 (현재 내 PC)와 서버 간의 통신을 구현하기로 결정, 서버가 수신하는 방법을 이해하고 장치로 데이터를 전송하려면


을 jhonkola. 궁극적 인 목표는 장치와 통신하는 것이지만 현재는 PC에서 서버로 연결을 시도하고 있습니다. 이 작업에 성공하면 IP 주소와 서버 포트 번호가 필요한 장치에서 서버와 통신하여 데이터를 보내고 받도록 노력할 것입니다. TCP/UDP를 사용하여 를 전달하기 위해

  • 내가 .cs 코드에서 서버의 포트를 열 수 있습니다
    이 그것을 수행하는 방법에 내 가정이다.
  • 그러면 클라이언트는이 포트를 통해 데이터를 보내고받을 수 있습니다.
  • 클라이언트에서 보낸 데이터를 서버의 파일 에 저장할 수 있으며 언제든지 검토 할 수 있습니다. (지금 데이터베이스 문제에 대해 신경 쓰지 않기 때문에 관계형 데이터베이스에 데이터를 저장하지 않습니다.) 이것은 구현하려는 방법입니다.
    서버 C# 웹 응용 프로그램 :
    버튼을 클릭하면 포트는 클라이언트에 수신

    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를 사용할 때의 장점과 단점은 무엇입니까? 잘 살펴 보았지만 좋은 출발점을 찾을 수 없었습니다. 그리고 그러한 애플리케이션에 대한 경험이 없기 때문에 애플리케이션을 디버그 할 수 없었습니다.
+1

이 점을 이해하면 추적 장치가 직렬 장치 인 것 같습니다. 장치 통신을 TCP 또는 UDT 클라이언트/서버 코드없이 프로젝트의 해당 부분에 집중할 수있는 별도의 프로젝트로 분리하는 것이 좋습니다. 장치를 개발 컴퓨터에 직접 연결하고 먼저 장치를 사용하십시오. 직렬 통신의 예가 많이 있습니다. – pilotcam

+0

@mergia 해결 했습니까? 나는 비슷한 것을 찾고있다. 도울 수 있니? – applefreak

답변

2

현재 나의 질문은 다음과 같습니다

내 가정이 맞습니까? 내가 어떻게해야하지?

네, 기본 가정은 정확합니다. 서버는 청취 포트를 연 다음 클라이언트가이 포트에 연결하여 필요에 따라 데이터를 제거 할 수 있습니다. 나중에 검토 할 수 있도록 서버가이를 파일에 기록하도록 할 수 있습니다.

위의 코드를 사용하여 저장하려고 시도했지만 파일이 없습니다.

파일이 이미 생성되어 있습니까? 파일이 시스템에 존재하지 않으면 가지고있는 메소드가 실패합니다.

비교 응용 프로그램 추적을 위해 TCP 을 비교할 때 UDP를 사용하면 장점과 단점이 있습니다.

UPD는 네트워크 설정면에서 저렴합니다. 그것은 "빠르고 더러운"의사 소통 방법입니다. 단점은 모든 메시지가 제대로 전달되지 않을 수도 있다는 것입니다. 일부 응용 프로그램에서는 이것이 중요하지 않으며 이점은이 비용의 가치가 있습니다.

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

이 리스너 수 있도록 수신 메시지를 잡을 수있는 광범위한 기능을하고 (이것은 기본적으로 첫 번째 네트워킹 프로그램이기 때문에) 가장 가능성이 다른 시스템에 영향을주지 않습니다 : 이제

몇 가지를 내가 바꿀 것 .

또한 청취자가 파일 쓰기를 처리하고 다시 듣기 위해 스레드를 생성하도록 할 수 있습니다. 이것은 매우 표준적인 방법이며 서버가 여러 연결을 처리 할 수있게 해줍니다.

2

좋은 답변은 제품에 대한 자세한 지식이 필요하므로 종합적으로 대답하기 어렵습니다. 지원을 위해 제조업체/리셀러에게 문의하는 것이 좋습니다.

몇 가지 일반적인 사항 : 장치에 네트워크를 통해

보내기 명령을 사용하면 인터넷에서 장치에 연결할 수 있어야합니다. 운영자가 들어오는 모든 트래픽을 차단할 수 있기 때문에 이것은 GSM 네트워크에서 항상 쉬운 것은 아닙니다. 제조업체에서이를위한 솔루션을 제공했을 수도 있습니다.

장치에 연결할 수 있으면 해당 프로토콜이 내장되어 있다고 가정하고 명령을 내리는 데 사용되는 프로토콜에도 응답을받을 수있는 메커니즘이 포함됩니다.

+0

제조사의 지원을받는 것이 거의 불가능합니다. 그들은 참조 구현을 제공하지 않았습니다. 사실, 필자는 그들이 제공 한 문서를 가지고 있습니다 (자세한 것은 아닙니다). 문제는 응용 프로그램 (장치 통신 서버)의 일부를 설계하여 서버와 장치 사이의 통신을 설정하는 것이 어렵다는 것입니다. 실제 구현은 내 다음 관심사가 될 것입니다. 네트워크 프로그래밍에 대한 경험이 없습니다. – Mergia

관련 문제