Java 大作业回忆--day03-- 两岸初次的连接

来源:互联网 发布:腾讯java社会面试题 编辑:程序博客网 时间:2024/04/29 08:11

Day03  ----  看着简单,想连起来还真不容易^-^

那天吃饭的时候想了想,现在控制电脑的模块也写出来了,如果再用Socket把手机和电脑连在一起,那不就大功告成了~ 哈哈,我以前写过Socket的程序,电脑端和安卓端都写过,这么一想我们很快就要成了啊~根本不用那么长时间~哈哈。。。。。。

那天下午就开始写,但写之前遇到了一个问题:我们觉得我们不能让用户自己输入IP,因为我们的用户也不都是懂电脑的啊~不能让人家为了控制个PPT还学一个怎么查自己IP啊,对吧,那多麻烦~ 这个步骤能不能我们来做,反正也是局域网,电脑接进手机的热点嘛~应该能做~

     就这么一个想法,最后发现还真是走了很多弯路呢~ 我思考的时候,思路是这样的:要是想不输入IP,而且还是局域网,那UDP广播肯定行啊~这肯定不用想~还有一个方面就是不知道Android有没有提供可以获取dhcp的方法,直接从手机端得到电脑的IP,用TCP也行。 那我们就从两方面同时入手,我去查UDP,我的小伙伴知水去查TCP。

     其实我上来并没有查,因为我觉得可以,以前用的时候UDP广播就直接把最后一个频段换成.255就行嘛~ 那这个简单。说着我就写了一个电脑端--1.电脑接入手机热点(当时手机端还没写,只能用都用电脑端假装测试一下) 2. 获取电脑本地的IP地址 3.将最后一个频段改成.255  --大功告成!  啊啊啊???

      竟然不行,接收端一直接不到信息,这是为啥? 

      又去查了资料,原来广播地址不是就直接.255就是,而实IP地址和子网掩码的非的与,就是把主机号取出来取反~ 哎~看来当时理解的还是不到位啊。。。 那怎么获取子网掩码嘞。。?   于是我又百度了一番,基本没有看到好使的。这种方法一下子陷入了窘境。

       话说知水那边,他也在网上查来查去,找到了一个WifiManager类,里面有一个getDhcpInfo的方法,据说里面可以得到接入设备列表,于是我们就找到了Android的官方API,看了一下,其实这个方法并不是我们想象中的那样,并不能达到我们想要的效果,所以我们最终也放弃了这个想法。

        那怎么怎么办呢?  紧接着,这一天过去了。

        第二天起来,我拿起手机,就顺手查了一下手机开热点,里面有一个答案引起了我的注意----所有开热点的手机,IP地址都是192.168.43.1 , 这是真的么?   于是我写了个程序,一测试,真是诶!!  测了几个手机开热点之后都是这个IP,那这不就好说了,我直接用UDP在那个频段广播就好啦~~哪怕不广播,直接TCP都行~  问题一下子就解决了。

        既然IP能搞到了,那就开始写呗~手机端和电脑端应该也差不多~ 

        一会我就把手机端的也写了出来,但问题来了,不知道为啥,手机端一直不能发数据,这可叫我如何是好。。

        调了一次又一次,一边调,一边上网上查,诶? 对了,以前写Android用Socket的时候,数据传输好像必须在子线程中才能执行,对对对,赶紧写个子线程。 说着,我就把DatagramSocket加到了子线程里,再一试,空指针异常?!!!  这又是什么鬼,我哪有空指针哈?  

        于是,我打开了debug模式,单步调试。走着走着,哦! 发现问题了,原来有一个变量在tryCatch块中定义的,出来就变成null了,那好说,定义成全局的呗~  都改完了,插上手机就开始跑。  

         诶? 怎么什么错误都没有,还是不能发送数据啊?  这次我还真不知道是哪的问题了,左思右想左思右想,哪里有问题呢。? 想了一下午,晚上的时候突然灵光一现,好像没有加权限吧?!!!

         赶紧跑回宿舍,打开电脑,百度了一下权限加了上去,成了!!! 

         哈哈哈,太艰辛了~~

         总结一下哈,就是这样: 1,电脑连到手机的热点,手机在局域网中Ip是固定的  2,传输数据的部分,要写在子线程里才行  3,一定要添加相应功能的权限才可以使用。

         用了两天,搞定了这么三个问题,也算是值了,嘿嘿。。  

         得~  这次就写到这啦~~~

0 0
原创粉丝点击