我买了一个 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 收到错误,,你能给我一段代码吗?谢谢希望这对我有帮助。