欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 之 多线程与Socket联合使用案例

程序员文章站 2022-04-30 19:30:30
...
             多线程 和 Socket  的使用介绍

   
1、产生背景:
   
    实际应用中的客户端可能需要和服务器保持长时间的通信,即服务器需要不断的读取客户端数据,并向客户端写入数据,客户端也需要不断读取服务器数据,并向服务器写入数据;

    使用传统的BufferedReader  的readLine 方法读取数据时,在该方法成功返回之前线程被阻塞,程序无法继续执行。基于这个原因,服务器应该为每个Socket 单独启动一条线程,每条线程负责与一个客户端进行通信。


2、案例分析:实现一个简单 C/S 聊天室为例:实现多个客户端通信

    项目分析:
   
    因为服务器读啊应该包含多条线程,每个Socket对应一条线程,该线程负责读取Socket对应输入流的数据(从客户端发送来的数据),并将读取到的数据向每个Socket输出来发送一遍(即将一个客户端发送的数据广播给其他的客户端),因此需要在服务器端使用List来保存所有的Socket.
   
    实现步骤:
        (1)、定义保存所有Socket 的集合;
        (2)、创建ServerSocket 监听;
        (3)、采用循环不断接收来自客户端的连接请求;
        (4)、将接收客户端请求产生的Socket添加到集合中;
        (5)、客户端连接后启动一条线程为该客户服务;

    编写服务器端的线程类:

        服务器端的线程类不断读取客户的数据,在此声明一个方法来读取客户端的数据,当服务器线程类读取到客户端的数据之后,程序便利Socket 集合,并将该数据向集合中的每一个Socket 发送一次。如果读取数据的过程捕获了异常,那么说明该Socket对应的客户端Socket 出现了问题,程序就将该Socket 从集合合删除;

   
    客户端的实现:
       
        每个客户端包含两条线程:一条负责生成主界面,并响应用户动作,并将输入的数据(从服务器发送过来的数据),并负责将这些数据在主程序界面上显示处理。

   
    源码下载地址:
http://download.csdn.net/detail/zhang583740618/7062177