⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqclient.java

📁 自己做的一个QQ聊天系统
💻 JAVA
字号:
package chat.client;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.SocketException;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.swing.*;import chat.client.ChatWindow;import chat.trans.*;public class QQClient extends WindowAdapter implements ActionListener{	/**	 * @param args	 */	MainWindow mw;	Map<String,ChatWindow> cws = new HashMap<String,ChatWindow>();	Socket s;    String owner;//当前在线用户    PrintWriter out;    BufferedReader in;    public QQClient() throws Exception{        //初始化Socket           s = new Socket(Protocol.SERVER_IP,        		         Protocol.SERVER_PORT);           out = new PrintWriter(        		   s.getOutputStream());           InputStreamReader ir =         	   new InputStreamReader(        			    s.getInputStream());           in = new BufferedReader(ir);           mw = new MainWindow();           addlistener();    }	public static void main(String[] args){    	try{    		new QQClient().run();    	}catch (Exception e) {    		e.printStackTrace();    	}    }	public void addlistener(){		mw.rp.ok.addActionListener(this);		mw.mp.login.addActionListener(this);		mw.mp.register.addActionListener(this);		mw.lp.ok.addActionListener(this);		mw.op.qunliao.addActionListener(this);		mw.op.siliao.addActionListener(this);		mw.addWindowListener(this);	}	private void process(String msg){		System.out.println("process:" + msg);		char type = msg.charAt(0);		switch(type){		case Protocol.ONLINE_USER_MSG:			 mw.setTitle("QQ聊天室--" + owner);		     mw.show("op");		     String[] ss = msg.substring(1).split(",");		     for(int i=0; i<ss.length; i++){		    	 if(ss[i].equals(owner)){		    	     mw.op.users.addItem("本人");		    	 }else{		    		 mw.op.users.addItem(ss[i]);		    	 }		     }		     break;		case Protocol.REGISTER_RESULT:			 JOptionPane.showMessageDialog(					 mw.getParent(),msg.substring(1),"系统提示",JOptionPane.OK_OPTION);			   mw.show("rp");			   break;		case Protocol.ADD_USER:			mw.op.users.addItem(msg.substring(1));			break;		case Protocol.DEL_USER:		    mw.op.users.removeItem(msg.substring(1));		    break;		case Protocol.LOGIN_RESULT:			JOptionPane.showMessageDialog(					 mw.getParent(),msg.substring(1),					 "系统提示",JOptionPane.OK_OPTION);			mw.show("lp");			break;		case Protocol.CHAT_MSG:			@SuppressWarnings("unused") String s = msg.substring(1);			String[] s2 = s.split(Protocol.SPLIT_CHAR+"");			System.out.println(s + "----" + owner);			//if(s2[0].equals(owner)){			//	Iterator it = cws.values().iterator();			//	while(it.hasNext()){			//		ChatWindow cw = (ChatWindow) it.next();			//		cw.ta.append("我说:");			//		cw.ta.append(s2[2] + "\n");			//	}		//	}else{				if(s2[1].equals("all")){					if(cws.containsKey("all")){					     System.out.println(cws.size());					     cws.get("all").ta.append(s2[0]+"说:");					     cws.get("all").ta.append(s2[2]+"\n");					}				}else{					if(!cws.containsKey(s2[0]))						   createChatWindow(s2[0]);					cws.get(s2[0]).ta.append(s2[0] +"说:");					cws.get(s2[0]).ta.append(s2[2]+"\n");				}				break;		}	}	public void run() throws Exception{		while(true){			String msg = null;			try{				msg = in.readLine();			}catch(SocketException e){				System.out.println("用户下线");				System.exit(0);			}			process(msg);		}	}	public void windowClosing(WindowEvent e){		try{			s.close();			System.exit(0);		}catch(IOException e1){			e1.printStackTrace();		}	}  public void actionPerformed(ActionEvent e){	  if(mw.rp.ok == e.getSource()){		  StringBuffer meg = new StringBuffer();		  meg.append(Protocol.USER_REGISTER_MSG);		  meg.append(mw.rp.loginName.getText());		  meg.append(Protocol.SPLIT_CHAR);		  meg.append(mw.rp.passwd.getPassword());		  meg.append(Protocol.SPLIT_CHAR);		  meg.append(mw.rp.realName.getText());		  meg.append(Protocol.SPLIT_CHAR);		  meg.append(mw.rp.sex.getSelectedItem());		  out.println(meg);		  out.flush();		  owner = mw.rp.loginName.getText();	  }else if(mw.mp.login == e.getSource()){		     mw.show("lp");	  }else if(mw.mp.register == e.getSource()){		     mw.show("rp");	  }else if(mw.lp.ok == e.getSource()){		    StringBuffer s = new StringBuffer();		    s.append(Protocol.USER_LOGIN_MSG);		    s.append(mw.lp.loginName.getText());		    s.append(Protocol.SPLIT_CHAR);		    s.append(mw.lp.passwd.getPassword());		    out.println(s);		    out.flush();		    owner = mw.lp.loginName.getText();	  }else if(mw.op.qunliao == e.getSource()){		    createChatWindow("all");	  }else if(mw.op.siliao == e.getSource()){		    String name = mw.op.users.getSelectedItem().toString();		    if(name.equals("本人")){		    	JOptionPane.showMessageDialog(		    			mw.getParent(),"请选择其他在线用户!",		    		    "系统提示",JOptionPane.OK_OPTION);		    }else{		    	  createChatWindow(name);		    }	  }else{		    	Iterator it = cws.keySet().iterator();				while(it.hasNext()){					String key = (String)it.next();					ChatWindow cw = (ChatWindow)cws.get(key);					if(e.getSource() == cw.tf){						StringBuffer sb = new StringBuffer();						sb.append(Protocol.CHAT_MSG);						sb.append(owner);						sb.append(Protocol.SPLIT_CHAR);						sb.append(key);						sb.append(Protocol.SPLIT_CHAR);						sb.append(cw.tf.getText());						out.println(sb);						out.flush();						cw.ta.append("我说:" + cw.tf.getText() + "\n");						cw.tf.setText("");						break;				}		  }      }  }  public void createChatWindow(String name){	   ChatWindow cw = null;		if(name.equals("all")){			cws.put(name,new ChatWindow("群聊"));		}else{			cws.put(name, new ChatWindow("与"					+ name + "私聊"));		}		cws.put(name,cw);		cw.tf.addActionListener(this);		System.out.println("已创建聊天窗口," + "共有"+cws.size()+"个");		}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -