📄 cconnect.java
字号:
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
public class cConnect extends Thread //保持与服务器间的连接
{
Socket toServer;
ObjectOutputStream sToServer;
ObjectInputStream fromServer;
Message Mdata;
String LogonName;
JTextArea Tshow;
JScrollPane TshowScro; //滚动条
JList Online;
JScrollPane OnlineScro;
Vector UserList;
JCheckBox MPrivate; //复选框
public cConnect()
{
Mdata=new Message(new Users(),"",1);
Tshow=new JTextArea();
TshowScro=new JScrollPane(Tshow);
Online=new JList();
OnlineScro=new JScrollPane(Online);
UserList=new Vector(1,1);
MPrivate=new JCheckBox("不公开");
}
boolean ConToServer(String Addr) //与服务器创建连接
{
try
{
toServer=new Socket(Addr,1629);
fromServer=new ObjectInputStream(toServer.getInputStream());
sToServer=new ObjectOutputStream(toServer.getOutputStream());
SendtoServer(Mdata);
Mdata=(Message)GetfromServer();
return DoMessage(Mdata); //如果连接服务器成功,DoMessage()将返回true
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"连接服务器失败!"+e);
}
return false;
}
synchronized void tostart() //启动线程
{
try
{
this.start();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"start failed....\n"+e);
}
}
public void run()
{
while(true)
{
try
{
Mdata=(Message)GetfromServer(); //读取从服务器发送来的Message对象
DoMessage(Mdata); //调用函数以分析Message信息并进行处理
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"run failed\n"+e);
break;
}
}
}
boolean DoMessage(Message todo) //处理从服务器接收到的Message对象
{
switch(todo.type)
{
case 0:
JOptionPane.showMessageDialog(null,todo.message);
break;
case 1:
JOptionPane.showMessageDialog(null,todo.message);
return true; //连接成功
case 2:
JOptionPane.showMessageDialog(null,todo.message);
return true; //注册用户成功
case 3:
LogonName=todo.user.Name;
JOptionPane.showMessageDialog(null,todo.message);
getlist();
this.tostart();
return true; //登录成功
case 5: //一般消息
this.Tshow.setText(this.Tshow.getText()+todo.message+"\n");
break;
case 7: //其它用户登录消息并更新用户列表
this.Tshow.setText(this.Tshow.getText()+todo.message+"\n");
if(!todo.user.Name.equals(LogonName))
{
this.UserList.addElement(todo.user.Name);
this.Online.setListData(UserList);
}
break;
case 8: //其它用户离线消息并更新用户列表
this.Tshow.setText(this.Tshow.getText()+todo.message+"\n");
for(int i=0;i<UserList.size();i++)
{
if(todo.user.Name.equals(UserList.elementAt(i)))
{
UserList.removeElementAt(i);
break;
}
}
this.Online.setListData(UserList);
//JOptionPane.showMessageDialog(null,"setlistdata");
break;
case 10: //私聊消息
todo.message.replaceAll("<"+LogonName+">","你");
this.Tshow.setText(this.Tshow.getText()+todo.message+"\n");
break;
}
return false;
}
void getlist() //向服务器请求获取当前在线用户列表
{
try
{
Mdata.type=6;
SendtoServer(Mdata);
UserList=(Vector)GetfromServer();
this.Online.setListData(UserList);
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"获取用户列表失败\n"+e);
}
}
synchronized boolean SendMsg(String Minfo) //发送消息
{
Message Msg=new Message(new Users(),Minfo,4);
try
{
if(Msg.message.trim().replace("\n","").equals(""))
{
JOptionPane.showMessageDialog(null,"请输入消息内容!");
return false;
}
Msg.user.Name=LogonName;
Msg.user.Password=Online.getSelectedValue().toString();
//在此时,Password用于存储接收者的用户名
if(Msg.user.Password.equals(LogonName))
{
JOptionPane.showMessageDialog(null,"公共场合,请不要自言自语!");
return false;
}
if(MPrivate.isSelected())
Msg.type=9;
SendtoServer(Msg);
return true;
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"发送消息失败!\n请在列表中选择收件人!");
return false;
}
}
synchronized boolean SendInfo(Message info) //提交注册,登录所需的用户信息
{
try
{
Mdata=info;
SendtoServer(Mdata);
Mdata=(Message)GetfromServer();
return DoMessage(Mdata); //如果注册或登录成功 DoMessage()将返回true
}
catch(Exception e)
{
return false;
}
}
void SendtoServer(Object toClient) //将Message对象发送到服务器
{
try
{
sToServer.writeObject(toClient);
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"与服务器已经断开连接\n程序即将关闭");
System.exit(0);
}
}
Object GetfromServer() //接收从服务器发送来的Message对象
{
try
{
return fromServer.readObject();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"与服务器已经断开连接\n程序即将关闭");
System.exit(0);
}
return null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -