作为一个刚接触android开发的新手,再加上自己之前对java以及c++等编程语言了解甚少,学习起来真是很吃力。尤其不知道该按照什么样的路线来学习让我十分苦恼。于是,看了一些教程、视频之后,了解了些最基本的知识,就开始读一些简单的源码。但感觉学习效果并不好。有些知识总是在遗忘与记忆中反复进行。为此,谨以此系列博客记录自己学习过程中遇到的问题,以便日后回顾,来防止自己好不容易看懂的一些知识慢慢忘掉。
本文所写的socket通讯实例要实现的基本功能就是:使得连在同一路由器上的的两个手机设备A和B可以通过socket通讯互相收发短信。最终要实现的效果如下图所示:
通过在网上查找资料,实现这一功能大致有两种思路:
一:每一个手机既做客户端又做服务端。
二:两个手机都连到同一个服务器上,利用服务器转发消息,间接实现A和B的通讯
经过尝试以及参考一些源码,第一种思路很快实现了,但是第二种方法还没能实现,接收转发的消息总显示为null。
个人感觉实现socket编程的核心就是要建立服务端和客户端的连接,
服务端使用serverSocket= new ServerSocket(6346);建立一个监听接口,并通过
Socket socket = serverSocket.accept();//处于阻塞状态,直到接收到请求返回socket对象。
来接收客户端发来的连接请求。客户端通过Socket socket=new Socket(服务端ip,6346);//发送一个连接请求
当建立后就获取一个Socket对象,通过使用输入输出流进行写入和读取就可以实现数据的接受与发送。
在程序实现的过程中,为了把接收到数据显示出来,由于接受数据部分位于一个子线程中,而子线程不能直接更新UI线程里控件的内容。所以使用了Handler类,来实现把子线程的数据发到主线程来更新UI中的控件。擦,貌似是这样,我也说不清了。果然还是想起来容易,做起来难啊!看来还是理解不够。就先写这些吧。
具体源码如下:
package test.socket;
import java.io.BufferedReader;
import java.io.IOE