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

📄 qqclient.java

📁 IO流的项目好
💻 JAVA
字号:
//QQ客户端连接线程
package myQQ;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.util.*;

class QQClient extends Thread
{
	//通信
	Socket sc = null;
	//读取信息
	ObjectInputStream ois = null;
	//发送消息
	ObjectOutputStream oos = null;
	//终止线程标记
	boolean stop = false;
	
	QQLogIn log = null; //登录界面
	QQ_AddUser rs = null; //注册界面 
	QQ_Main mf = null; //主界面
	QQChatFrame cf = null; //聊天界面
	
	QQClient()
	{
		try {	
			//呼叫服务器
			sc = new Socket("127.0.0.1",1500);
	    }
	    catch (Exception ex) {
	    }
	}
	
	public void run()
	{
		try {
			//接受消息
			this.readMess();
	    }
	    catch (Exception ex) {
	    	System.out.println (ex);
	    }
	}
	
	//接受消息
	public MessType readMess() throws Exception
	{
		MessType mt = null;
		while(true)
		{
			synchronized(this)
			{
				if(stop)
					break;
			}
			ois = new ObjectInputStream(sc.getInputStream());
			Object tem = ois.readObject();
			if(tem instanceof MessType)
			{
				mt = (MessType)tem;
				switch (mt.State) {
			    	case 0: this.onLine(mt); break;
			    	case 20: this.changeState(mt); break;
			    	case 4: this.Register(mt); break;
			    	case 41: this.Register(mt); break;
			    	case 42: this.Register(mt); break;
			    	case 10: this.chat(mt); break;
			    }
			}
		}
		return mt;
	}
	
	//发送消息
	public void sendMess(MessType mt) 
	{
		try {
			oos = new ObjectOutputStream(sc.getOutputStream());	
			oos.writeObject(mt);
			oos.flush();	
	    }
	    catch (Exception ex) {
	    	System.out.println (ex);
	    }		
	}
	
	public void closeClient()
	{	//关闭连接
		try {
			if(oos!=null)
				oos.close();
			if(ois!=null)
				ois.close();
			sc.close();
	    }
	    catch (Exception ex) {
	    	System.out.println (ex);
	    }
	}
	
	public synchronized void stopClient()
	{	//终止线程
		this.closeClient();
		stop = true;
		this.notify();
	}
	
	public void setLogFrame(QQLogIn log)
	{	//传入登录界面
		this.log = (QQLogIn)log;
	}
	
	public void setQQ_AddUser(QQ_AddUser rs)
	{	//传入注册界面
		this.rs = (QQ_AddUser)rs;
	} 
	
	public void setChatFrame(QQChatFrame cf)
	{	//传入聊天界面
		this.cf = (QQChatFrame)cf;
	}
	
	public void onLine(MessType mt)
	{	//登录操作
		if(mt.Results.length()>0)
		{	//验证未通过
			if(mt.Results.equals("密码有误!"))
				JOptionPane.showMessageDialog(this.log,mt.Results);
			else if(mt.Results.equals("此QQ号码不存在!"))
				JOptionPane.showMessageDialog(this.log,mt.Results);
			else if(mt.Friend!=null)
			{	//进入主界面
				this.mf = new QQ_Main(mt.Friend,log.client,this.log.id);
				this.log.dispose();
			}
		}
	}
	
	public void changeState(MessType mt)
	{	//状态改变
		//-------------------存在问题
		for (int i = 0; i<mf.u1.length; i++)
		{	//上线提示
			if(mf.u1[i]!=null)
			{
				if(mf.u1[i].readId.equals(mt.Results))
				{
					mf.u1[i].sur();
				}	
			}
		}	
	}
	
	public void Register(MessType mt)
	{	//初始化注册界面的省市信息
		if(mt.State==41)
		{
			Vector v = mt.RegPro;
			for (int i = 0; i<v.size(); i++)
			{
				String s = v.elementAt(i).toString();
				rs.jcbState.addItem(s);
			}
			rs.jcbState.removeItem("选取省份");
			rs.jcbState.updateUI();
		}
		else if(mt.State==42)
		{
			Vector v = mt.RegCity;
			rs.jcbCity.removeAllItems();
			for (int i = 0; i<v.size(); i++)
			{
				String s = v.elementAt(i).toString();
				rs.jcbCity.addItem(s);
			}	
			rs.jcbCity.updateUI();
		}
		else if(mt.State==4)
		{	//接受发回的注册号
			rs.jx3.setText(mt.Sendid);
			JOptionPane.showMessageDialog(null,"恭喜你!注册成功","消息",JOptionPane.OK_CANCEL_OPTION);
			((CardLayout)rs.mp.getLayout()).show(rs.mp,"Card2");
			rs.jpB.setVisible(true);
		}
	}
	
	public void chat(MessType mt)
	{	//聊天
		if(mt.State==10)
		{
			cf.chatMain.writeSaying(mt.SendName,mt.SendTime,Color.green);
			cf.chatMain.setContent(mt.Content);
		}
	}
}

⌨️ 快捷键说明

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