Android编程实战——仿微信群聊-1——服务器端实现

Android编程实战——仿微信群聊-1——服务器端实现

学习Android过程中,为了更有组织化的学习就造了个轮子练练手。

项目源代码移步github

首先就是服务端和客户端的实现了。
服务器和客户端的网络传输使用Java Socket写的。
对Java Socket还没有了解的可以看看这里——Java Socket 基础编程
先要有一个实现思路,在这里服务器端有三个主要的类,Server类,ServerThread类,ClientThread类。
作用分别是,Server类可以启动一个服务器线程ServerThread来监听端口,然后每有一个客户端连接上该端口,就启动一个客户端线程ClientThread。

代码:
Server类:

public class Server {

    private ServerSocket serverSocket = null;

    private ServerThread serverThread = null; //服务器线程,负责监听某个端口与客户端通信,(自写类)


    private final int PORT = 4243; //服务器监听端口


    //构造方法
    public Server() {
    }

    //启动一个服务器线程
    public void runServer() {
        if (serverSocket == null) {
            try {
                //监听端口PORT
                serverSocket = new ServerSocket(PORT);
                //启动服务器线程
                serverThread = new ServerThread(serverSocket);
                serverThread.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] arg) {
        Server server = new Server();
        server.runServer();

    }

}

在这里我用LinkedBlockingQueue实现消息队列,每个服务器线程有一个接收消息的队列,每个客户端线程有一个发送消息的队列。客户端线程将收到的消息放入服务器线程的接收消息队列中,服务器取出消息按照情况分发到各个客户端线程的发送消息队列中,然后再由客户端线程发送消息。

ServerThread类:

public class ServerThread extends Thread {
   

    private ServerSocket serverSocket = null;

    private LinkedBlockingQueue<MyMessage> msgQueue = null; //服务器的消息队列

    private List<String> hostAddress = null; //记录客户端的ip地址与客户端消息队列相对应

    private List<LinkedBlockingQueue<MyMessage>> sendQueues = null; 
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值