安卓聊天app设计思路

关于IO流的代码

添加输出流

OutputStream out = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out,"UTF-8");
PrintWriter pw = new PrintWriter(osw,true);
allOut.add(out);

监听输入流
​ BufferedReader读满缓冲区或者读到换行符才返回,实际上readLine()是一个阻塞函数,所以执行完一重循环并不会立即跳出来,而是在没有数据读取时,一直阻塞在那,这样就实现了while(1)的效果

InputStream in = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(in,"utf-8");
BufferedReader br = new BufferedReader(isr);
String message = null;
while((message = br.readLine())!=null) {//无字符丢失地得到一行
    for(PrintWriter out:allOut) {
        out.println(message);
    }
}

思路

Ⅰ、服务端

两个按钮,两个事件
n+1个线程:一个线程等socket连接,n个线程等n个用户写消息到socket输出流
一、开启

  1. 初始化输出流集合、new ServerSocket(8888)
  2. 开线程①用server.accept()接收客户端socket
  3. 每成功连接一个客户端就开一个服务线程,它做两件事:拿到socket输出流、阻塞监听socket输入流广播(通过socket输出流发送)

二、关闭
server.close()
对比读写
在这里插入图片描述

Ⅱ、客户端

三个按钮,三个事件
三个线程:创建socket、监听服务器发的广播、监听用户输入
一、发送
点击发送会把用户输入的聊天内容写到socket输出流
二、连接

  1. 弹出AlertDialog
  2. 点击确定开线程①建立连接->new Socket(ip, serverPort)
  3. 确认socket创建后,开线程②阻塞监听socket输入流拿到广播消息并显示,开线程③监听用户输入并通过socket输出流发送出去

三、断开
​ socket.close()
对比读写:
在这里插入图片描述

最终效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值