android手机客户端与pc机进行socket通信
这两天做了一个手机和电脑通信利用socket进行网络通信的小程序,上图先:
在写程序的过程中发现了很多问题。。。
一、电脑和手机的IP必须在同一个网段,也就是IP的前三段必须是一样的。
刚开始电脑和手机都连着老师办公室的 无线,可是却连不上。。折腾了好久才发现虽然都是连在同一个路由器,网段却不一样。(老师说应该是一样的,我也不知道怎么回事。)后来修改了手机的IP地址,才能连上。关于如何修改手机IP,百度一下就OK了。
二、ReadLine()读数据阻塞问题
终于连接上了,却读不出数据。经过debug发现readline后面的代码都不再执行了。上网搜了一下readline,才发现原来是个坑。有关知识看这里
小心readline。解决方法:在每次发送数据前加换行符。
<span style="font-size:14px;">out.write((data + '\n').getBytes("GBK"));</span>
三、pc端的字符编码格式是GBK,而手机端的格式是UTF-8.在收发消息时会出现乱码。
解决方法:在将数据写入流的时候,指定数据的编码格式。
<span style="font-size:14px;">writer.write(me.getBytes("utf-8"));</span>
四、这是今天才发现的一个问题。当我在新创建的线程中执行
<span style="font-size:14px;">textView.append("服务器:" + b + '\n');</span>
抛出
java.lang.RuntimeException: Can't create handler inside thread that has not异常。
网上搜了一下,有关UI的操作必须在UI线程中去执行。如果其他线程获得的数据要改变UI界面,必须用handler想UI线程发送消息,告诉UI线程。
解决方法:在主线程用一个handler对象来处理消息,在自己创建的线程中用handler对象向主线程发送消息。
主线程:
handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if(msg.what == 0x1314)
{
textView.append("服务器:" + b + '\n');
}
return true;
}
});
新线程:
new Thread(new Runnable() {
@Override
public void run() {
try {
socket = new Socket("192.168.0.103", 5000);
Log.e("--->", "已发出链接请求");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = socket.getOutputStream();
while (socket != null) {
b = in.readLine(); //注意阻塞
// textView.append("服务器:" + b + '\n');
handler.sendEmptyMessage(0x1314);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
折腾了这么一顿,终于可以正常运行了!
项目代码:
项目代码
android手机客户端与pc机进行socket通信相关推荐
- Android客户端与PC服务器实现Socket通信
Android终端持续扫描AP信息并发送给服务器端的实现.首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路.使用ServerSocket创建TCP服务器端,然后在Android客户 ...
- unity android服务器端,【深圳Unity3D培训】 Android客户端与PC服务器实现Socket通信
[深圳Unity3D培训] Android客户端与PC服务器实现Socket通信 Android终端连续扫描AP信息并发送给服务器端的完成.起首基于TCP协定在Android终端和PC两头之间构成收集 ...
- Android客户端与PC服务器实现Socket通信(wifi)
转载自:http://www.cnblogs.com/dwayne/archive/2012/05/22/Android_pc_wifi_socket.html 本文介绍Android终端持续扫描AP ...
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
本文介绍Android终端持续扫描AP信息并发送给服务器端的实现.首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路.使用ServerSocket创建TCP服务器端,然后在Andro ...
- unity android服务器端,[转载收藏]unity3d Android客户端与PC服务器实现Socket通信(wifi)...
本文介绍Android终端持续扫描AP信息并发送给服务器端的实现.首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路.使用ServerSocket创建TCP服务器端,然后在Andro ...
- c pc 和android通讯,Android 客户端与PC服务端socket通信接收与发送图片(终结者)
前言 这个解决方案是我和队友在<物联网>比赛的集训中得到的.在socket中Android客户端接收图片是相当的棘手(反正我当时就是这样觉得),接收文字还算简单.在刚开始接触socket接 ...
- 安卓手机卓android手机客户端,卓大师刷机专家|卓大师刷机pc Android 客户端 V2.3.5 安卓版...
自动识别手:机信息,让您对于爱机了如指掌: 根据手机机型提供定制化的一键刷机解决方案: 提供当前机型最详实的ROOT教程和刷机教程: 支持一键获取ROOT权限和去除ROOT权限: 支持一键备份还原,提 ...
- Android客户端与PC服务器通过socket进行交互实例
一直以来对Android socket通信都很模糊,今天终于研究了一个网上的例子,自己又修改了下,算是对Android socket通信有点了解了. 下面是具体的代码,说明都在注释中了.需要注意的是, ...
- Android作为客户端,PC作为服务端:实现网络通信
此项目实现网络通信,android手机客户端去请求PC服务端,将PC上mysql中的数据显示在手机上. PC服务端用JavaWeb写了个servlet,android手机客户端请求这个servlet, ...
最新文章
- UVa 111 - History Grading
- 05.multi_search_template
- UI完美素材|(Watch展示篇)Mockups动态图提案模板
- read fread open fopen write fwrite
- Maven + Docker
- 64位centos下QQ无法输入中文只能输入英文
- FISCO BCOS Solidity 如何import引入其他代码库 Source “Table.sol“ not found: File not found
- 于仕琪 老师新版本人脸识别 - DLL接口及Python语言案例
- 网页右侧悬浮QQ在线客服代码
- base64深入理解与判断、base32、base16
- python中scale啥意思_scale什么意思
- 工作碰到的问题解决积累
- 2020年综合评价备考全知道(附31所综合评价院校名单)
- python找出素数_python找素数
- Google Fonts 谷歌字体的使用
- 网易集团补贴百万,游戏开发者扶持计划!仅限30名!!
- 基于web的计算机配件销售系统,javaweb电脑配件销售管理系统
- PlayerMaker小球随机弹跳练习
- win10pe制作方法
- DIV+CSS-01