zoukankan      html  css  js  c++  java
  • 团队项目(三)

      最近实现了团队项目局域网聊天室的服务器端的框架,目前可以接收socket请求并收发消息。

      由于聊天室服务器需要同时维持多个socket通信,所以服务器端代码采用了多线程技术,即每接收到一个socket请求后将创建一个新的线程进行后续操作,而主线程一直在等待请求并分发任务。实现了同时服务多个socket的功能。

      代码如下:

      主线程代码:

     1 public class Server {
     2 
     3     public static void main(String[] args) {
     4         // TODO Auto-generated method stub
     5         try {
     6             ServerSocket svr = new ServerSocket(5555);
     7             while (true) {
     8                 Socket s = svr.accept();
     9                 ServerThread ST = new ServerThread(s);
    10                 ST.start();
    11                 ChatManager.getChatManager().add(ST);
    12             }
    13         } catch (IOException e) {
    14             // TODO Auto-generated catch block
    15             e.printStackTrace();
    16         }
    17 
    18     }
    19 
    20 }

      线程类:

    public class ServerThread extends Thread {
    
        private Socket soc=null;
        public BufferedReader in=null;
        public BufferedWriter out=null;
        public ServerThread(Socket soc) {
            // TODO Auto-generated constructor stub
            this.soc = soc;
        }
        public void out(String msg){
            try {
                out.write(msg);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        @Override
        public void run() {
    
            InputStream is=null;
            OutputStream os=null;
            try {
                is=soc.getInputStream();
                os=soc.getOutputStream();
                in=new BufferedReader(new InputStreamReader(is));
                out=new BufferedWriter(new OutputStreamWriter(os));
                System.out.println(soc.getPort());
                ChatManager.getChatManager().threadsVector.add(this);
                out.write("欢迎");
                out.flush();
                while (true) {
                    String str = in.readLine();
                    ChatManager.getChatManager().pulish(this, str);
                    System.out.println(str);
                    //System.out.println(ChatManager.getChatManager().threadsVector.size());
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            super.run();
        }
    
    }

      多线程服务器初步框架完成,目前测试可以同时服务、维持多个socket通信。具体功能会在之后的开发中完善。

  • 相关阅读:
    pyhanlp 实体命名识别
    NABCD需求分析
    源代码
    遇到的问题和解决方法
    运行及总结
    测试与调试
    读《一个程序猿的生命周期》和《人,绩效和职业道德》有感
    面向对象程序设计
    设计类图
    SRS文档
  • 原文地址:https://www.cnblogs.com/bjut13070017/p/5602220.html
Copyright © 2011-2022 走看看