2011-05-20 25 views
3

我有一個應用程序在Android這是一種客戶端服務器。使用奇怪的格式通過套接字發送dat

我已經建立了這兩者之間的連接,現在我通過套接字發送數據。

服務器是發送數據的客戶端,客戶端從套接字讀取數據。

服務器發送到插座一些GPS數據(經度,緯度)和真發送它我使用以下格式:

公共類座標{

private final double lon; 

    private final double lat; 

    private final int workerId; 

    public Coordinate(double lat, double lon, int workerId) { 

    this.lat = lat; 
    this.lon = lon; 

    this.workerId=workerId; 
    } 

    public double getLon() { 
    return lon; 
    } 

    public double getLat() { 
    return lat; 
    } 
    public int getwId(){ 
     return workerId; 
    } 


} 

所以對於每一個經度和我想發送的緯度我添加一個int的workerID。

因此,最後通過我的套接字發送座標類的實例。

Coordinate coord=new Coordinate(lat,lon,workerID); 
    os=new PrintStream(clientSocket.getOutputStream()); 

    os.println(coord); 

那麼,直到這裏一切順利。

在客戶端我讀數據是這樣的:

掃描器是=新掃描儀(新DataInputStream類(socket.getInputStream()));

while(is.hasNext()) 
      { 
       try{ 
       Coordinate coord=is.next(); 
        System.out.println(coord.getLon()); 

        } 
       catch(Exception e){ 
        e.printStackTrace(); 
       } 
      } 

的問題是,掃描類,我使用它從套接字輸入流中讀取返回的字符串,但我要送通過套接字的東西完全地不同..... 。

是否有人知道我怎麼能轉換輸入數據中的座標,或者我應該如何着手找到什麼我送通過插座上的經度和緯度?????

Thx!

編輯:我使用的格式,因爲我有我與數據需求!

回答

1

os.println(coord)只是寫了一個參考,這沒有多大意義,如果你想發送一些有意義的東西,那麼Coordinate類應該實現Serializable。看看this article的地方。

可選,我建議你在使用JSON格式兩端轉儲和裝載。它將爲您提供簡單易讀的互操作方式。

+0

使用JSON意味着放棄序列化???我真的不知道是什麼意思JSON! – embry 2011-05-20 15:03:44

+0

是的,這就是我說的「可選」。通過可序列化,您只能實現與JSON的Java2Java通信,您可以在更多的平臺/語言之間交換數據。更多的是一種RESTFul類似的方法。如果您不太關心互操作性,只有您的客戶端將訪問該服務,那麼請使用Java Serializable。 – 2011-05-20 15:12:18

+0

Actualli我的服務器是在java上,我的客戶端在android-java上....他是唯一一個讀取數據的人.Thx – embry 2011-05-20 15:15:32

1

PrintStream.println(Object)寫入其從所述對象的Object.toString()方法獲取一個字符串(PrintStream一般只寫字符串它連接到的OutputStream)

您可以創建一個文本編碼爲座標(與編碼和解碼功能),你可以沒有太多的改變來你的代碼

或使用該序列化功能和使用ObjectStreams