基于socket通信的局域网聊天室搭建(socket通信第四弹)

来源:互联网 发布:无线传感器网络 编辑:程序博客网 时间:2024/06/16 14:29

欢迎转载,请注明转载微信订阅号(安卓编程入门进阶)。

百度云原清晰度地址:http://pan.baidu.com/s/1mhS0H8O

在前两次课程已经实现了客户端向服务器端的数据单向传输并且能够将数据呈现到界面,本次课程将前两次课程合并完成服务器端向客户端传递数据并展示。最终实现的是一个基于socket通信的局域网单点聊天室。

1、  服务器端的界面布局为从上至下为开启按钮、聊天输入框、发送按钮、显示用TextView。为这些界面补充MainActivity.java的定义和初始化操作。


2、相比于上一课程,服务器端欠缺的功能为发送数据部分。类似于客户端的发送线程,在服务器程序中新建一个SendData的子线程即可,将子线程的定义和初始化在MainActivity.java中完成,将sendData线程实例发送到连接子线程。用于连接的子线程有监听到连接之后,将此socket连接实例通过SendData的setSocket方法传递。当有客户端连接到服务器之后,在MainActivity.java中的发送按钮监听事件中监听到有连接之后执行一次SendData子线程。

MainActivity.java界面在单击事件中添加线程执行方法:


StartServer中将用于传递socket连接句柄:


SendData子线程中补充发送数据方法:


3、安卓客户端程序需要添加接收数据并呈现数据的功能。由于需要将接收到的数据展现到界面上,所以需要将监听线程的句柄保留在MainActivity.java中,因此需要在MainActivity.java中初始化Listener子线程,将子线程实例通过参数传递到StartClient子线程中。如果获取到socket连接则启动Listener子线程并传递socket连接实例。在Listener子线程类中重写run方法,针对根据获取到的socket实例,初始化输入监听。如果接收到数据则调用回调函数,将数据作为参数传入回调函数。


4、新建一个名为CallBackMain的接口类,在类中定义一 个CallbacktoMain的回调函数。在Listener子线程中定义SetCallBackMain的注册函数。


5、在MainActivity.java中使用listener子线程实例注册回调函数,然后使用Handler和Message将数据呈现到客户端的显示界面。


OK,单点聊天室的课程进行到此,对此项目有兴趣的同学可以直接联系我进行更近一步的探讨,因为程序中有很多可以优化的地方。


PS:各位同学在使用本课程的案例程序的时候,注意将本案例中的IP地址和端口号更换为各位自己规划的端口即可。然后确保两台终端在一个局域网中,即可实现通信。但是现实生活中由于移动网络属于各运营商的内网,因此手机在实际生活中不会充当一个服务器的角色。现实生活中例如微信都是在两个通信终端之间添加一台类似于中继的服务器。服务器的程序开发可以用java,大家有兴趣可以深入研究。

                                                  更多最新安卓编程资料请关注微信公众号:安卓编程入门进阶                                            

                                                




0 0
原创粉丝点击