这两天做了一个手机和电脑通信利用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通信相关推荐

  1. Android客户端与PC服务器实现Socket通信

    Android终端持续扫描AP信息并发送给服务器端的实现.首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路.使用ServerSocket创建TCP服务器端,然后在Android客户 ...

  2. unity android服务器端,【深圳Unity3D培训】 Android客户端与PC服务器实现Socket通信

    [深圳Unity3D培训] Android客户端与PC服务器实现Socket通信 Android终端连续扫描AP信息并发送给服务器端的完成.起首基于TCP协定在Android终端和PC两头之间构成收集 ...

  3. Android客户端与PC服务器实现Socket通信(wifi)

    转载自:http://www.cnblogs.com/dwayne/archive/2012/05/22/Android_pc_wifi_socket.html 本文介绍Android终端持续扫描AP ...

  4. unity3d Android客户端与PC服务器实现Socket通信(wifi)

    本文介绍Android终端持续扫描AP信息并发送给服务器端的实现.首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路.使用ServerSocket创建TCP服务器端,然后在Andro ...

  5. unity android服务器端,[转载收藏]unity3d Android客户端与PC服务器实现Socket通信(wifi)...

    本文介绍Android终端持续扫描AP信息并发送给服务器端的实现.首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路.使用ServerSocket创建TCP服务器端,然后在Andro ...

  6. c pc 和android通讯,Android 客户端与PC服务端socket通信接收与发送图片(终结者)

    前言 这个解决方案是我和队友在<物联网>比赛的集训中得到的.在socket中Android客户端接收图片是相当的棘手(反正我当时就是这样觉得),接收文字还算简单.在刚开始接触socket接 ...

  7. 安卓手机卓android手机客户端,卓大师刷机专家|卓大师刷机pc Android 客户端 V2.3.5 安卓版...

    自动识别手:机信息,让您对于爱机了如指掌: 根据手机机型提供定制化的一键刷机解决方案: 提供当前机型最详实的ROOT教程和刷机教程: 支持一键获取ROOT权限和去除ROOT权限: 支持一键备份还原,提 ...

  8. Android客户端与PC服务器通过socket进行交互实例

    一直以来对Android socket通信都很模糊,今天终于研究了一个网上的例子,自己又修改了下,算是对Android socket通信有点了解了. 下面是具体的代码,说明都在注释中了.需要注意的是, ...

  9. Android作为客户端,PC作为服务端:实现网络通信

    此项目实现网络通信,android手机客户端去请求PC服务端,将PC上mysql中的数据显示在手机上. PC服务端用JavaWeb写了个servlet,android手机客户端请求这个servlet, ...

最新文章

  1. UVa 111 - History Grading
  2. 05.multi_search_template
  3. UI完美素材|(Watch展示篇)Mockups动态图提案模板
  4. read fread open fopen write fwrite
  5. Maven + Docker
  6. 64位centos下QQ无法输入中文只能输入英文
  7. FISCO BCOS Solidity 如何import引入其他代码库 Source “Table.sol“ not found: File not found
  8. 于仕琪 老师新版本人脸识别 - DLL接口及Python语言案例
  9. 网页右侧悬浮QQ在线客服代码
  10. base64深入理解与判断、base32、base16
  11. python中scale啥意思_scale什么意思
  12. 工作碰到的问题解决积累
  13. 2020年综合评价备考全知道(附31所综合评价院校名单)
  14. python找出素数_python找素数
  15. Google Fonts 谷歌字体的使用
  16. 网易集团补贴百万,游戏开发者扶持计划!仅限30名!!
  17. 基于web的计算机配件销售系统,javaweb电脑配件销售管理系统
  18. PlayerMaker小球随机弹跳练习
  19. win10pe制作方法
  20. DIV+CSS-01

热门文章

  1. 辉仔日记之学代码第十五期——IO流图书管理系统
  2. C++多线程和并发-更新(互斥量的基本概念、使用、作用、案例)-2023/2/12
  3. 论文查重自己文章会查吗?
  4. 我推荐亲戚家小孩学编程,差点被打一顿!
  5. 未来十年,互联网行业到底需要什么样的运营?
  6. 为什么企业都在建立指标体系,有什么用途?
  7. 计算机DCS三级体系结构组成,DCS系统原理和结构.ppt
  8. VMware中NET模式无法获取IP地址
  9. 【linux】循序渐进学运维-printf
  10. 来一个LM1875T