Android : httpURLConnection以POST方式连接Servlet进行数据交互,遇到的两个坑及解决方案

(第一次写技术博客.......啦啦啦.....2018-5-4)

首先,向大家介绍一下这两个坑:

    1号坑:使用android模拟器可以交互成功,但是同一路由器下的 手机 和 电脑 却无法交互

    2号坑:使用手机可以连接到Servlet,但是收不到回传数据(用wireshark抓包过,Servlet的确发送了回传数据)


背景描述:我用httpURLConnection 连接servlet 进行交互,主要实现登录和注册功能,Android端  用HTTPURLConnection   以POST 方式提交给本地eclipse中tomcat中运行的servlet

一开始我用Android模拟器,连接本地的servlet,很容易就实现了,但是在真机上却一直失败。

(系统是win7)


1号坑 解决办法: 关闭防火墙就可以实现

         注意:关闭防火墙不能在cmd里敲代码 net stop MpsSvc 来关闭

        Android : httpURLConnection以POST方式连接Servlet进行数据交互,遇到的两个坑及解决方案

(本人以往一直使用这种简单粗暴的方式关闭防火墙,但是这种方式关闭的防火墙会阻隔手机和servle的连接)

                   而是必须得  去控制面板>大图标>Windows 防火墙>打开或关闭 Windows 防火墙里去操作

*(关于两种关闭防火墙的区别,本人也不是很懂,求解大神告知)



2号坑 解决办法:注意httpURLConnection.getInputStream 的写法

    解决了1号坑之后,在同一路由器同一网段下,手机和电脑tomcat里的servlet可以连接了,serclet端也收到了数据,也回传了数 据(本人用wireshark抓包分析过,servlet端的确回传了数据),但是手机端接收到的数据却为空(in.available()为0)

以下为我旧的书写方式:

Android : httpURLConnection以POST方式连接Servlet进行数据交互,遇到的两个坑及解决方案

(该方式在模拟器下完美运行)

所以我一开始考虑的问题都是围绕android版本和手机防火墙,但是事实证明这些都是扯淡,根本无影响

后来无意中,我把上述代码,加了一个BufferReader居然就成功了!

贴出新代码

Android : httpURLConnection以POST方式连接Servlet进行数据交互,遇到的两个坑及解决方案

(真的很坑有没有,明明在虚拟机里简单写写就能完美运行,为什么真机就要加上BufferReader!

本人菜鸟一个,求解大神告知


(本次博客处女座就这些啦...........)