我买了一个gps,我用sms消息测试了这个,并用自己的软件来检索lat / long,它工作正常,请看截图:
现在我确信与gprs->internet
的通信有效,所以我想创建自己的软件,可以执行软件制造商不具备的许多其他功能。
在我的第一次反思中,我尝试在端口7070上使用socket tcp / ip(java)监听NMEA消息,这是我的源代码:
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)
在serveur.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的:
来自软:
来自GPS(1/2)(其空信息):
最后来自GPS(2/2)的长/纬度/速度......:
正如我已经写过的那样,GPS发送了空消息......所以这里是所有细节。
@Peter Lawrey :我试图逐字节读取消息,但我从netbeans收到错误,,,你能给我一段代码吗?谢谢 希望这能帮助我。
答案 0 :(得分:2)
您确定GPS正在发送一条线路(以新线路结束)吗?
如果不是,我会反复使用read()来获取它发送的所有数据(直到达到EOF)