zoukankan      html  css  js  c++  java
  • java课程设计--WeTalk(201521123076)

    在线群聊系统

    1,团队课程设计博客链接

    http://www.cnblogs.com/slickghost/p/7018105.html

    个人负责模块或任务说明

    负责模块:总体设计及主要聊天功能实现

    2,自己的代码提交记录截图

    Markdown

    Markdown

    3,自己负责模块或任务详细说明

    服务器和客户端之间的各种请求,我通过自定义的标志来确认,如验证用户,首先,客户端会先发送”login”告诉服务器,这是一个登入请求。服务器接收到这个请求,就会等待接收一个User对象(通过序列化传输,把信息都放在这个对象内,更方便)提取用户名密码进行验证,通过数据库验证返回结果,再把结果告诉客户端,客户端收到true后,便告知用户登入成功。
    //验证用户
    public boolean sendUserToServerLogin(User user) throws IOException, ClassNotFoundException{

    		objectout.writeObject("login");
    		objectout.flush();
    		
    		
    		objectout.writeObject(user);
    		objectout.flush();
    		 //输入对象, 一定要flush()
    		//objectout.close();
    		
    		//验证结果
    		while(true){
    			String msg = objectin.readObject().toString();
               if(msg.equals("true")){
            	   return true;
            	   
               }
               else {
            	   socket.close();
            	   return false;   
               }
    		}
    	}
    
        			  //1.登入请求,接收到一个User对象,验证其用户名和密码
            		  if(mgs.equals("login")){
            			  if((obj = objectin.readObject()) !=null){
            				  User user = (User)obj;
            				  if(serverUserDaoJDBCImpl.checkUser(user)){
            					  ServerRunLog.log.info("User("+
            				  user.getNumber()+") Login." );
            				  objectout.writeObject("true");
            				  }
            				  else{
            					  objectout.writeObject("false");  
            				  }
            			  }
            		  }
    
    
    
    public boolean checkUser(User user) {
    	if(loadUser(user.getNumber()).getNumber() == user.getNumber() &&
    			loadUser(user.getNumber()).getPassword().equals(user.getPassword()))
    			return true;
    	return false;
    	
    }
    

    public User loadUser(int number) {

    	Connection conn = null;	
    	PreparedStatement pstat = null;
    	String sql = "select * from userData where number = ?";
    	ResultSet rs = null;
    	try {
    		conn = JDBCUtil.getConnection();
    		pstat = conn.prepareStatement(sql);
    		pstat.setInt(1, number);
    		rs = pstat.executeQuery();
    		while(rs.next()){
    			String netName = rs.getString("netName");
    			String password = rs.getString("password");
    			String sign=rs.getString("sign");
    			String telephone=rs.getString("telephone");
    			int isVip = rs.getInt("isVip");
    			User user = new User(number,password,netName,sign,telephone,isVip);
    			return user;
    		}
    	
    	}catch (SQLException sqle) {
    		sqle.printStackTrace();
    	}catch(Exception e){
    		e.printStackTrace();
    	}finally{
    		JDBCUtil.realeaseAll(null,pstat, conn);
    	}
    	return new User();
    }
    

    其他请求类似。
    接下来看一下主要的聊天转发功能:某个加入群聊,服务器将其加入线程列表,其发送消息时,服务器会将消息转发到线程列表内的所有用户。

    if(e.getSource()==chatJFrame.getSendButton()){

    		String msg = chatJFrame.getEditorTextArea1().getText();
    		 
    		try {
    			objectout.writeObject("message");
    			objectout.flush();
    			
    			objectout.writeObject(msg);
    			objectout.flush();
    			//System.out.println(msg);
    			chatJFrame.getEditorTextArea1().setText("");
    		} catch (IOException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}		
    	}
    

    //6.普通信息
    if(mgs.equals("message")){

            			String groupMsg = user.getNetName() + ": " + objectin.readObject().toString();
            			
            			
          				for (int i = 0; i < mainThread.onLineUserList.size(); i++) {
          				mainThread.onLineUserList.get(i).objectout.writeObject("groupMessage");
          				mainThread.onLineUserList.get(i).objectout.flush();
      					mainThread.onLineUserList.get(i).objectout.writeObject(groupMsg + "
    ");
      					mainThread.onLineUserList.get(i).objectout.flush();
          				}
    

    4,课程设计感想

    作为一个小组组长,本次课程设计让我收获了许多东西。 与第一次一个人做C语言课设不同的是,这次需要根据组员的实际情况安排具体任务,其实这本身就是一个难度所在。整个过程中也需要协调所有组员的工作。好在从结果来看,分配给大家的任务都能够大部分完成。第一次体验到团队协作的感觉。

    本次课设不足:最初的设计还是欠缺深度思考,导致在写的过程中两次改变整体包结构;任务安排上还不是很合理;没有实现最初设计的文件共享模块;

    通过本次课设,每个组员都能强化自己所做的那一部分知识,整体完成后一起过了一遍,了解了整体流程;可能是效率不高,时间不够,只实现了最基本的功能,当初预想的一些功能慢慢地删除,不过实现最基本的通信之后,在这基础上添加后续功能难度不是很大。

  • 相关阅读:
    experiment 2
    experiment 5
    php 代码审计之变量覆盖
    experiment 4
    experiment 3
    experiment 1
    2018铁三测评WP
    Lesson 1
    实验四、决策树算法及应用
    实验三 朴素贝叶斯算法及应用
  • 原文地址:https://www.cnblogs.com/slickghost/p/7056723.html
Copyright © 2011-2022 走看看