2011-05-20 24 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