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

📄 qqclient.java

📁 该文件在eclipse环境上运行
💻 JAVA
字号:
package chat.client;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.*;
import chat.trans.*;
import javax.swing.JOptionPane;;
public class QQClient extends WindowAdapter implements ActionListener{
	MainWindow mw;
	Map<String, ChatWindow> cws = 
		new HashMap<String, ChatWindow>();
	Socket s;
	String owner;
	PrintWriter out;
	BufferedReader in;
	
	public QQClient() throws Exception{
		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:
			String s = msg.substring(1);
			String[] s2 =
				s.split(Protocol.SPLIT_CHAR+"");
			System.out.println(s + " --" + owner);
			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();
		} 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){
					int no = mw.op.users.getItemCount();
					for(int i=0; i<no; i++){
						if(mw.op.users.
							getItemAt(i).equals(key)){
							break;
						}
						JOptionPane.showMessageDialog(
							mw.getParent(),key+"已下线!", 
							"系统提示",JOptionPane.OK_OPTION);
						return;	
					}
					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;
				}
			}
		}
	}
	private void createChatWindow(String name){
		ChatWindow cw = null;
		if(name.equals("all")){
			cw = new ChatWindow("群聊 -- " + owner);		
		}else{
			cw = new ChatWindow("与"	+
					name + "私聊 -- " + owner);
		}
		cws.put(name, cw);
		cw.tf.addActionListener(this);
		System.out.println("已创建聊天窗口," +
				"共有"+cws.size()+"个");
	}
}

⌨️ 快捷键说明

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