📄 logindialog.java~52~
字号:
socket = null;
name = null;
}
}
}
//send方法用于向服务器发送消息
private void send(String msg) {
try {
dos.writeUTF(msg);
dos.flush();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
//用于用户登录
public class Listen extends Thread {
public Listen(String n) {
//设定当前客户的名字
name = n;
}
//Listen类的run方法不断接收和处理服务器发送来的消息
public void run() {
String message = null;
while (true) {
//无限循环用于监听信息
try {
message = dis.readUTF();
//读取服务器传来的信息
}
catch (IOException e) {
e.printStackTrace();
disconnect();
stop();
}
if (message == null) {
//如果服务器传来的信息为空,则断开此次连接
listen = null;
socket = null;
return;
}
//用StringTokenizer类来实现读取分段字符
StringTokenizer str =
new StringTokenizer(message, ":");
//读取信息头来识别试何种信息
String keyword = str.nextToken();
if (keyword.equalsIgnoreCase("PEOPLE")) {
//如果读取的是PEOPLE,则表示是服务器发送的客户连接信息,
//此时,需要刷新客户端的用户列表
count = 0;
while (str.hasMoreTokens()) {
//读取加入的用户名称
String st = str.nextToken();
count++; //统计用户数目
}
}
else if (keyword.equalsIgnoreCase("QUIT")) {
//如果关键字是QUIT,则判断是服务器的关闭信息,
String who = str.nextToken();
//判断是否为服务器
if (who.equalsIgnoreCase("SERVER")) {
JOptionPane.showMessageDialog(null, "服务器关闭!\n", "错误",
JOptionPane.ERROR_MESSAGE);
try {
listen = null;
socket.close();
socket = null;
stop();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
else if (keyword.equalsIgnoreCase("WELCOME")) {
//WELCOME表示登录成功
ClientFrame cf = new ClientFrame(socket, dis, dos, name);
Center.CenterWindow(cf);
cf.setVisible(true);
//关闭登录框
disposeDialog();
//停止登录窗口的listen类
this.stop();
}
else if (keyword.equalsIgnoreCase("FAULTNAME")) {
//FAULTNAME表示登录失败
JOptionPane.showMessageDialog(null, "" + name +
",登录失败!\n用户名或密码错误", "错误",
JOptionPane.ERROR_MESSAGE);
//如果socket和name不为null,则初始为null
if (socket != null) {
try {
socket.close();
socket = null;
name = null;
//停止登录窗的listen类
this.stop();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
} //结束run方法
} //结束内部的Listen类
//用于监听号码注册,重设密码,修改密码
class listen2 extends Thread {
public void run() {
String messg = null;
while (true) {
try {
messg = dis.readUTF();
}
catch (IOException ex) {
stop();
}
if (messg == null) {
//如果服务器传来的信息为空,则断开此次连接
listen = null;
socket = null;
return;
}
StringTokenizer str =
new StringTokenizer(messg, ":");
//用StringTokenizer类来实现读取分段字符
String keyword = str.nextToken();
if (keyword.equalsIgnoreCase("REGISTEROK")) {
String number = str.nextToken();
JOptionPane.showMessageDialog(null,
"你的帐号:" + number +
"\n牢记你的号码、密码及密码保护",
"注册成功",
JOptionPane.
INFORMATION_MESSAGE);
//成功后初始为null
listen = null;
socket = null;
userID.setText(number);
rege.setVisible(false);
panel1.setVisible(true);
}
else if (keyword.equalsIgnoreCase("REGISTERFALSE")) {
JOptionPane.showMessageDialog(null, "注册失败,请重新注册!", "注册失败",
JOptionPane.ERROR_MESSAGE);
//失败后初始null
listen = null;
socket = null;
}
else if (keyword.equalsIgnoreCase("AMENDOK")) {
JOptionPane.showMessageDialog(null, "密码重设成功!", "恭喜",
JOptionPane.
INFORMATION_MESSAGE);
//成功后初始为null
listen = null;
socket = null;
forgetNumber.setText("");
forgetPasswordA.setText("");
forgetPassword1.setText("");
forgetPassword2.setText("");
forget.setVisible(false);
panel1.setVisible(true);
}
else if (keyword.equalsIgnoreCase("AMENDFALSE")) {
JOptionPane.showMessageDialog(null,
"密码重设失败!\n请你检查\n1.号码是否正确\n2.密码保护是否正确",
"错误",
JOptionPane.ERROR_MESSAGE);
//失败后初始null
listen = null;
socket = null;
}
else if (keyword.equalsIgnoreCase("XIUGAIOK")) {
JOptionPane.showMessageDialog(null, "密码修改成功!", "恭喜",
JOptionPane.
INFORMATION_MESSAGE);
//成功后初始为null
listen = null;
socket = null;
jTextField1.setText("");
jPasswordField1.setText("");
jPasswordField2.setText("");
jPasswordField3.setText("");
jPanel5.setVisible(false);
panel1.setVisible(true);
}
else if (keyword.equalsIgnoreCase("XIUGAIFALSE")) {
JOptionPane.showMessageDialog(null,
"密码修改失败!\n请你检查\n1.号码是否正确\n2.旧密码是否正确\n3.你还可以通过密码重设来修改密码",
"错误",
JOptionPane.ERROR_MESSAGE);
//失败后初始null
listen = null;
socket = null;
}
}
}
}
//关闭窗口构造方法
public void disposeDialog() {
this.dispose();
}
//登录键
public void jButton1_actionPerformed(ActionEvent e) {
if (userID.getText().trim().equals("")) {
JOptionPane.showMessageDialog(null, "号码不可为空", "警告",
JOptionPane.WARNING_MESSAGE);
}
else {
if (socket == null) {
try {
//与服务器建立连接 端口 5555
socket = new Socket
(InetAddress.getLocalHost(), 5555);
if (socket != null) {
try {
//实例化两个数据流
dis = new DataInputStream
(socket.getInputStream());
//将dis指向socket的输入流
dos = new DataOutputStream
(socket.getOutputStream());
//将dos指向socket的输出流
}
catch (IOException ex) {
ex.printStackTrace();
disconnect();
}
StringBuffer info = new StringBuffer
("PEOPLE:");
char[] chars = this.userPassword.getPassword();
String ps = new String(chars);
info.append(userID.getText() + ":" + ps + ":");
info.append(InetAddress.getLocalHost()
.toString());
send(info.toString());
listen = new Listen(userID.getText());
listen.start();
//启动线程
}
else {
JOptionPane.showMessageDialog(this, "登录超时,服务器端无响应!\n",
"错误", JOptionPane.ERROR_MESSAGE);
}
}
catch (IOException ee) {
JOptionPane.showMessageDialog(this,
"登录超时,服务器端无响应!\n请稍候再试...",
"错误",
JOptionPane.ERROR_MESSAGE);
disconnect();
}
}
}
}
public void jButton2_actionPerformed(ActionEvent e) {
System.exit(0);
}
//注册
public void jButton3_actionPerformed(ActionEvent e) {
char[] ssg = Password1.getPassword();
char[] sgs = Password2.getPassword();
String a = new String(ssg);
String b = new String(sgs);
if (a.equals("")) {
JOptionPane.showMessageDialog(null, "新密码不可为空!", "警告",
JOptionPane.WARNING_MESSAGE);
}
else if (PasswordA.getText().equals("")) {
JOptionPane.showMessageDialog(null, "密码保护不可为空!", "警告",
JOptionPane.WARNING_MESSAGE);
}
else if (a.equals(b)) {
if (socket == null) {
try {
//与服务器建立连接 端口 5555
socket = new Socket
(InetAddress.getLocalHost(), 5555);
if (socket != null) {
try {
//实例化两个数据流
dis = new DataInputStream
(socket.getInputStream());
//将dis指向socket的输入流
dos = new DataOutputStream
(socket.getOutputStream());
//将dos指向socket的输出流
}
catch (IOException ex) {
ex.printStackTrace();
disconnect();
}
StringBuffer info = new StringBuffer
("REGISTER");
info.append(":" + a);
info.append(":" + PasswordA.getText());
send(info.toString());
listen2 sg = new listen2();
sg.start();
//启动线程
}
else {
JOptionPane.showMessageDialog(this,
"请稍候再试...", "错误", JOptionPane.ERROR_MESSAGE);
}
}
catch (IOException ee) {
JOptionPane.showMessageDialog(this,
"连接超时,服务器端无响应!\n请稍候再试...",
"错误",
JOptionPane.ERROR_MESSAGE);
disconnect();
}
}
}
else {
JOptionPane.showMessageDialog(null, "两次输入的密码不匹配!", "错误",
JOptionPane.ERROR_MESSAGE);
}
}
//密码重设取消
public void jButton6_actionPerformed(ActionEvent e) {
this.setTitle("用户登录");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -