存档

‘工作’ 分类的存档

Android在联通GPRS网络下丢包分析

2013年7月25日 没有评论

Android出现丢包问题,备注一下:
问题:
Android在联通的GPRS网络下,偶现长期无法连接现象。

调查过程:
  Android和服务端第一层,同时使用tcpdump抓包,碰到失败的情形后,分析两个包文件。
  发现小报文传输没问题,大报文1516传输失败,服务器端无相应的包。SYN握手协商的MSS是1460,看起来正常。
  初步怀疑联通网络不支持MSS1460的包,考虑X.25只支持536大小计划调整服务端MSS为536。
  尔后发现大部分时候正常的报文也是1460,可以正常通讯。

更多内容…

分类: 工作 标签: , , ,

geohash的格边缘问题

2013年7月2日 没有评论

使用geohash搜索,当前位置越接近格的边缘,搜索结果越不准(格外的很近,却搜不到),无论怎么扩格大小或偏移,都无法解决此问题。
一种方法可解决此问题:搜索时,把当前格周边的8个格也取出来,一并搜索。

一个牛人提供了比较好用的工具:https://github.com/kungfoo/geohash-java

使用牛人的工具,只使用其GeoHash,代码如下:
private static final int GEO_CHAR_BITS = 5;

GeoHash bitPrecision = GeoHash.withBitPrecision(lat, lng, GEO_CHAR_BITS * 4);//根据当前位置取精度取geohash:当前格
GeoHash[] adjacent = bitPrecision.getAdjacent();//取当前格周边的8个格

这九个格拿到后,用GeoHash的toBase32()方法拿到字符串,匹配即可。

分类: 工作 标签: , ,

eclipse新版本字体问题的解决

2013年6月11日 没有评论

新版本eclipse代码区和控制台输出的中文字体超丑的问题,之前碰到过一次,同事帮忙解决的,印象中是改了eclipse的某个文件。
今天重装系统又碰到一次,偶然发现另一种简单的解决办法:
Windows–>Prefereces–>General–>Appearance–>Colors and Fonts–>Basic–>Text Font–>Edit
默认的Consolas是有问题的,往下找Courier New,如果有,选它确定就成。
如果没有Courier New,点确定左边的那个链接(这个一般注意不到),会进操作系统的字体库,找到Courier New右键“显示”,回到eclipse,重新装Text Font的Edit界面,就能找到这个字体了,选中后确定。

dns临时失效时的解决方案

2013年6月8日 没有评论

缘起:手机客户端在某些情况下,DNS无法解析,导致运行异常。
想到一种方法来解决,用的是java的代码,可以参考以解决Android的问题。
走了一点弯路,最后还好想明白了,默认使用ip解析,避免dns从未可用的情况,不使用localhost和loop,因为它们是单例,搞的代码如下:
注:版权所有,转载请注明出处~
更多内容…

分类: 工作 标签: , , ,

geohash调研的结果

2013年6月8日 没有评论

给阿旭派了个任务,调研geohash在美国和中国大陆的精度,整理的还不错,我直接借花分享出来。

1.中国美国的经纬度范围
(a)中国
经度范围 75.208847 – 134.762163
纬度范围 7.983175 – 53.559089

(b).美国本土
经度范围 -124.672851 – 67.060546
纬度范围 25.085598 – 49.152969

(c).美国夏威夷
经度范围 18.968636 – 22.205206
纬度范围 -160.238342 – 154.786376

(d).美国阿拉施加
经度范围 54.826007 – 71.244355
纬度范围 -167.739257 – 130.693359
更多内容…

分类: 工作 标签: ,

不能重用SSLsession问题

2013年5月26日 没有评论

Android 2.3有个bug,需要重新改造SSLSocketFactory,把socket中的impl对象实例中注入带host信息的InetAddress及port。样例代码如下:

@Override
public Socket createSocket(Socket socket, String host, int port,
        boolean autoClose)throws IOException, UnknownHostException {
    Socket sk = xx.getSocketFactory().createSocket(socket, host, port, false);
    //特殊解决方案,解决android 2.3 SSL不能重用session问题
    try {
        Field implFiled = Socket.class.getDeclaredField("impl");
        implFiled.setAccessible(true);
        SocketImpl impl = (SocketImpl) implFiled.get(sk);

        Field addFiled = SocketImpl.class.getDeclaredField("address");
        addFiled.setAccessible(true);
        addFiled.set(impl, InetAddress.getByName(host));

        Field portFiled = SocketImpl.class.getDeclaredField("port");
        portFiled.setAccessible(true);
        portFiled.set(impl, port);

    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
    return sk;
}
分类: 工作 标签: