«java.net.SocketException: сброс соединения» при чтении предложений NMEA с устройства GPS - PullRequest
1 голос
/ 01 марта 2012

Я купил GPS, я проверил это с помощью SMS-сообщения и с его собственным программным обеспечением, чтобы получить широту / долготу, и он работает нормально, см. Скриншот: enter image description here

Теперь я уверен, чтосвязь с gprs->internet работает, поэтому я хочу создать свое собственное программное обеспечение, которое может выполнять множество других функций, которых нет у производителя программного обеспечения. В своем первом размышлении я попытался прослушать сообщения NMEA с сокетом tcp / ip (java) на порту 7070, вот мой исходный код:

 import java.io.*;
 import java.net.*;


 public class Serveur {
 static final int port = 7070;
  public static void main(String[] args) throws Exception {              

    ServerSocket s = new ServerSocket(port);
    System.out.println("waiting for connexion from GPS 7070");
    Socket socClient = s.accept();
    System.out.println("Connexion GPS ok");

           BufferedReader in = new BufferedReader(
                           new InputStreamReader(socClient.getInputStream())
                          ); 
            PrintWriter out = new PrintWriter(
                         new BufferedWriter(
                            new OutputStreamWriter(socClient.getOutputStream())), 
                         true);   
    String str = in.readLine(); 

    System.out.println("the GPS message  is : " + str);         

    in.close();
    out.close();

    socClient.close();
  } 
  }

Я попытался отправить сообщение через клиент Java в локальной сети, и это работает ..

Но проблема, которую я не понимаю: когда я получаю сообщение от GPS, я получаю эту ошибку:

waiting for connexion from GPS 7070
Connexion GPS ok
Exception in thread "main" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
    at sun.nio.cs.StreamDecoder.read(Unknown Source)
    at java.io.InputStreamReader.read(Unknown Source)
    at java.io.BufferedReader.fill(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at serveur.Serveur.main(Serveur.java:27)

at serveur.Serveur.main (Serveur.java: 27)

ошибка возникает из line String str = in.readLine();

, если его программное обеспечение смогло перехватить сообщение NMEA, почему не мое приложение ??

ОБНОВЛЕНИЕ:

Я понюхал сеть, вотрезультат:

[протокол, используемый моим GPS] [4]

первый пакет, полученный от GPS (the hidden ip adress is my fixed public address): enter image description here

первый ответиз программного обеспечения (1/2) (это пустое сообщение):

enter image description here

из программного обеспечения (2/2): enter image description here

изGPS:

enter image description here

с программного обеспечения: enter image description here

с GPS (1/2) (пустое сообщение): enter image description here

и, наконец, long / lat / speed ... от GPS (2/2): enter image description here

, как я уже писал, есть пустые сообщения, отправленные GPS ...Итак, вот все детали.

@ Peter Lawrey : Я пытался прочитать сообщение побайтно, но получил сообщение от netbeans ,, не могли бы вы дать мне кусок кода?спасибо Надеюсь, это поможет мне.

1 Ответ

2 голосов
/ 01 марта 2012

Вы уверены, что GPS отправляет строку (оканчивается новой строкой)?

Если нет, я бы неоднократно использовал read (), чтобы получить все данные, которые он отправляет (до достижения EOF)

...