📄 qqclient.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 + -