1

我买了一个 gps,我用短信和它自己的软件测试了它来检索纬度/经度,它工作正常,看截图: 在此处输入图像描述

现在我确定与的通信gprs->internet有效,所以我想创建自己的软件,它可以执行软件制造商不存在的许多其他功能。在我的第一次思考中,我尝试 使用套接字监听NMEA消息端口 7070 上的 tcp/ip (java) ,这是我的源代码:

 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)

在 server.Serveur.main(Serveur.java:27)

错误来自line String str = in.readLine();

如果它的软件能够拦截消息 NMEA 为什么不是我的应用程序?

更新:

我嗅了嗅网络,结果如下:

[我的 GPS 使用的协议][4]

从 GPS 接收到的第一个数据包(the hidden ip adress is my fixed public address): 在此处输入图像描述

软件的第一个响应(1/2)(它是一条空消息):

在此处输入图像描述

从软件(2/2): 在此处输入图像描述

从全球定位系统:

在此处输入图像描述

从软: 在此处输入图像描述

来自 GPS(1/2)(它是一条空消息): 在此处输入图像描述

最后是来自 GPS(2/2)的长/纬度/速度: 在此处输入图像描述

正如我已经写过的,GPS 发送了空消息……所以这里是所有细节。

@Peter Lawrey:我试图逐字节读取消息,但我从 netbeans 收到错误,,你能给我一段代码吗?谢谢希望这对我有帮助。

4

1 回答 1

2

您确定 GPS 正在发送一条线路(以一条新线路结束)吗?

如果不是,我会重复使用 read() 来获取它发送的所有数据(直到达到 EOF)

于 2012-03-01T12:05:23.957 回答