2012-03-01 83 views
1

我買了一個gps,我測試了這個短信並用它自己的軟件檢索了lat/long,它工作正常,請參閱截圖: enter image description here從GPS設備讀取句子NMEA時出現「java.net.SocketException:Connection reset」

現在,我敢肯定,隨着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爲什麼不是我的應用程序?

UPDATE:

我嗅網絡,這裏是結果:

[通過我的GPS使用的協議] [4]

從GPS接收到的第一分組(the hidden ip adress is my fixed public address ): enter image description here

軟件的第一個響應(1/2)(其空消息):

enter image description here

從GPS:

enter image description here

從軟:

enter image description here

從軟件(2/2)

enter image description here

從GPS( 1/2)(其空信息): enter image description here

終於長/ LAT /速度...從GPS(2/2): enter image description here

,因爲我已經寫了,也有通過GPS發送空消息... ...所以在這裏是所有細節。

@Peter Lawrey:我試圖逐字節讀取消息,但是我得到了netbeans錯誤,,,你能給我一段代碼嗎?謝謝 希望這能幫助我。

+0

確定的GPS是一個客戶端的Socket?認爲設備是服務器是有意義的。 – 2012-03-01 12:55:39

+0

我不確定,但通常這是一個套接字客戶端... – 2012-03-06 09:41:09

+0

你有設備和服務器在同一臺機器嗎? – 2012-03-06 09:50:03

回答

2

你確定GPS正在發送一行(以新行結束)嗎?

如果沒有,我會用閱讀()多次讓所有發送的數據(直到達到EOF)

+0

謝謝你的答案,但我怎麼可以驗證它發送一個新行結束? – 2012-03-01 12:20:42

+0

您可以嗅探流量,或者只是讀取每個字節,而無需做出這個假設,看看它給你什麼。 – 2012-03-01 12:21:31

+0

PeterLawrey:有效的GPS發送一個沒有換行的字符列表...解決! – 2012-05-10 11:38:17

相關問題