Android Socket 聊天工具(一个服务端实现多个客户端间通信)

 

客户端设计思路:

  一 用户登录界面

用一个EditText作为用户名输入口,用一个按键确定。

注册一个广播接收器,专门接收由后来的聊天界面发过来的消息广播(包括发信人,收信人,消息体)。

创建一个客户端连接服务端的方法(要在线程中启动该方法),连接成功并获取输入输出流以后,再在里面启动一个输入流管理线程(接受并处理由服务端发送过来的消息)。并通过intent启动下一个好友列表界面(同时把自身用户名发给下一界面)。

对于输入流管理线程,要先判断接收到的是好友名单还是聊天消息发送两种广播,(服务端发送两种信息时可以加个标签以便线程区分)。然后分发出两种广播,一种广播后面的好友列表界面接受的在线好友名单,另一种广播出聊天界面接收的聊天信息。

菜单下做一个退出Activity按键,方便用户退出程序。

当一切准备好以后,用户在输入用户名并点击确定,就可以实现以上操作,同时进入了好友列表界面(前提是能正确连接上服务端)。

               

  二 好友列表界面

注册一个广播接收器,专门接收由登录界面的输入流管理线程发送过来的好友名单广播

listView逐个显示好友名单。

获取用户登录界面发过来的自身用户名。

listView绑定一个监听器,当用户点击listView上的某一好友时,通过intent启动下一个聊天界面,并把所点击到的好友用户名以及自身用户名发给下一个界面。

               

 

  三 聊天界面

获取好友列表界面发送过来的聊天好友用户名以及自身用户名,并在Title上显示。

用一个EditText作为聊天消息输入口,用一个按键确定输出。

当用户点击确定以后,发送一个消息广播(包含发信人,收信人,消息体),让用户登录界面的消息广播接收器接收。

注册一个广播接收器接受用户登录界面的输入流管理线程发送过来的消息。

                    

 

    服务端设计思路:

  消息处理界面(只有一个界面)

创建一个监听连接请求方法 (监听客户端发送连接请求,需要在线程中启动)。

  A  当用户发送连接请求时,生成socket对象。由该socket对象生成输出流和输入流,从输入流中提取出客户端发送过来的用户名,把用户名放到sickName数组上,把输出流放在ArrayOut数组中。

  B  发送新客户端XXX连接成功广播。

  C  预先用sickName数组和ArrayOut数组创建发送好友列表方法(给各已连接客户端发送好友名单),在这里调用方法。

  D  新生成并启动输入流管理线程(接受并处理客户端发送过来的消息,由于有一个新用户生成,就新生一个输入流管理线程,所以客户端发送的消息不会混乱)。

创建发送好友列表方法

注册两个广播接收器,一个接收新客户端XXX连接成功广播;另一个接收输入流管理线程发送过来的聊天消息,识别出目标对象,并向目标对象分别发送消息。

onResume方法中启动监听线程。

菜单下做一个退出Activity按键和刷新按钮(再次发送已连接用户名单给各客户端)。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值