国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > android手机客户端与pc机进行socket通信

android手机客户端与pc机进行socket通信

来源:程序员人生   发布时间:2015-09-02 08:03:50 阅读次数:3859次

这两天做了1个手机和电脑通讯利用socket进行网络通讯的小程序,上图先:




在写程序的进程中发现了很多问题。。。

1、电脑和手机的IP必须在同1个网段,也就是IP的前3段必须是1样的。

        刚开始电脑和手机都连着老师办公室的 无线,可是却连不上。。折腾了好久才发现虽然都是连在同1个路由器,网段却不1样。(老师说应当是1样的,我也不知道怎样回事。)后来修改了手机的IP地址,才能连上。关于如何修改手机IP,百度1下就OK了。


2、ReadLine()读数据阻塞问题

        终究连接上了,却读不出数据。经过debug发现readline后面的代码都不再履行了。上网搜了1下readline,才发现原来是个坑。有关知识看这里

谨慎readline。解决方法:在每次发送数据前加换行符。

<span style="font-size:14px;">out.write((data + ' ').getBytes("GBK"));</span>

3、pc真个字符编码格式是GBK,而手机真个格式是UTF⑻.在收发消息时会出现乱码。

        解决方法:在将数据写入流的时候,指定数据的编码格式。

<span style="font-size:14px;">writer.write(me.getBytes("utf⑻"));</span>

4、这是今天才发现的1个问题。当我在新创建的线程中履行
<span style="font-size:14px;">textView.append("服务器:" + b + ' ');</span>
抛出

java.lang.RuntimeException: Can't create handler inside thread that has not异常。


网上搜了1下,有关UI的操作必须在UI线程中去履行。如果其他线程取得的数据要改变UI界面,必须用handler想UI线程发送消息,告知UI线程。

解决方法:在主线程用1个handler对象来处理消息,在自己创建的线程中用handler对象向主线程发送消息。


主线程:



新线程:



折腾了这么1顿,终究可以正常运行了!

项目代码:
项目代码


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生