📄 server.java
字号:
//服务端窗口
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.applet.*;
import java.io.*;
import java.util.*;
import java.text.*;
public class Server extends JFrame implements ActionListener{
static final long serialVersionUID=80;
TextArea text;
JButton savebutton,openbutton,shutdownbutton;
FileDialog fileSave;
Dimension screenSize;
Toolkit tool;
Image myimage;
JPanel panel;
ServerSocket server=null;
Container container;
URL audiourl;
AudioClip audio;
SimpleDateFormat matter;
Server(String s){
super(s);
setSize(330,250);
setResizable(false);
container=getContentPane();
tool=getToolkit();
URL url = getClass().getResource("/images/server.jpg");
if(url!=null){
myimage=tool.getImage(url);
setIconImage(myimage);
}
try{
UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel");
}
catch(Exception e3){
JOptionPane.showMessageDialog(this,e3);
}
matter=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
panel=new JPanel(new FlowLayout(FlowLayout.CENTER));
savebutton=new JButton("保存");
openbutton=new JButton("启动");
shutdownbutton=new JButton("关闭");
panel.add(savebutton);
panel.add(openbutton);
panel.add(shutdownbutton);
savebutton.addActionListener(this);
openbutton.addActionListener(this);
shutdownbutton.addActionListener(this);
text=new TextArea(null,100,80,TextArea.SCROLLBARS_BOTH);
text.setEditable(false);
container.add(text,BorderLayout.CENTER);
container.add(panel,BorderLayout.SOUTH);
fileSave=new FileDialog(this,"保存用户记录",FileDialog.SAVE);
fileSave.setVisible(false);
Dimension frameSize=getSize();
screenSize=Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screenSize.width - frameSize.width) / 2,(screenSize.height - frameSize.height) / 2);
validate();
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
int n=JOptionPane.showConfirmDialog(null,"确定一定以及肯定退出服务器?","确认对话框",JOptionPane.YES_NO_OPTION);
if(n==JOptionPane.YES_OPTION){
audiourl=getClass().getResource("/sound/Bye.wav");
if(audiourl!=null){
audio=Applet.newAudioClip(audiourl);
audio.play();
}
try{
Thread.sleep(500);
}
catch(InterruptedException e1){
}
System.exit(0);
}
}
});
setVisible(true);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==savebutton){
fileSave.setVisible(true);
if(fileSave.getFile()!=null){
try{
File file=new File(fileSave.getDirectory(),fileSave.getFile());
FileWriter tofile=new FileWriter(file);
BufferedWriter out=new BufferedWriter(tofile);
out.write(text.getText(),0,text.getText().length());
out.flush();
out.close();tofile.close();
}
catch(IOException e1){
}
}
}
else if(e.getSource()==openbutton){
if(server==null){
try{
server=new ServerSocket(4331);
}
catch(IOException e1){
}
audiourl=getClass().getResource("/sound/Hi.wav");
if(audiourl!=null){
audio=Applet.newAudioClip(audiourl);
audio.play();
}
text.setText(matter.format(new Date())+"成功启动服务器"+"\n");
new BaseThread(server,this).start();
new Renew(this).start();
}
}
else{
int n=JOptionPane.showConfirmDialog(this,"确定一定以及肯定退出服务器?","确认对话框",JOptionPane.YES_NO_OPTION);
if(n==JOptionPane.YES_OPTION){
audiourl=getClass().getResource("/sound/Bye.wav");
if(audiourl!=null){
audio=Applet.newAudioClip(audiourl);
audio.play();
}
try{
Thread.sleep(500);
}
catch(InterruptedException e1){
}
System.exit(0);
}
}
}
public static void main(String args[]){
new Server("服务端");
}
}
//打开对外连接,等待客户连接
class BaseThread extends Thread{
Socket socket=null;
ServerSocket server;
Server frame;
TextArea text;
BaseThread(ServerSocket server,Server frame){
this.server=server;
this.frame=frame;
text=frame.text;
}
public void run(){
while(true){
try{
socket=server.accept();
}
catch(IOException e1){
text.append("正在等待客户!");
}
if(socket!=null){
new ServerThread(socket,frame).start();
}
else{
continue;
}
}
}
}
//和客户交流信息的线程
class ServerThread extends Thread{
Socket socket;
Server serverJFrame;
DataInputStream in;
DataOutputStream out;
String temp;
String state;
SimpleDateFormat matter;
ServerThread(Socket socket,Server serverJFrame){
this.socket=socket;
this.serverJFrame=serverJFrame;
matter=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
try{
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
}
catch(IOException e){
}
}
public void run(){
while(true){
try{
String s=in.readUTF();
if(s.equals("need number")){
int n=new Double(Math.random()*9000+1000).intValue();
temp=String.valueOf(n);
serverJFrame.text.append(matter.format(new Date())+socket.getInetAddress()+" 请求验证码 "+"\n");
serverJFrame.text.append("发送验证码:"+temp+"到"+socket.getInetAddress()+"\n");
out.writeUTF(temp);
}
else if(s.equals("pass")){
state="pass";
serverJFrame.text.append(matter.format(new Date())+socket.getInetAddress()+" 开始登陆 "+"\n");
}
else if(s.equals("Notpass")){
int n=new Double(Math.random()*9000+1000).intValue();
temp=String.valueOf(n);
serverJFrame.text.append(matter.format(new Date())+socket.getInetAddress()+" 登陆失败 "+"\n");
serverJFrame.text.append("发送验证码:"+temp+"到"+socket.getInetAddress()+"\n");
out.writeUTF(temp);
}
else if(s.equals("cancel")){
serverJFrame.text.append(matter.format(new Date())+socket.getInetAddress()+" 已经离开 "+"\n");
}
else{
serverJFrame.text.append(matter.format(new Date())+socket.getInetAddress()+" 要求验证 "+"\n");
if(s.equals(temp)){
serverJFrame.text.append(matter.format(new Date())+socket.getInetAddress()+" 通过验证 "+"\n");
out.writeUTF("pass");
}
else{
serverJFrame.text.append(matter.format(new Date())+socket.getInetAddress()+" 验证失败 "+"\n");
out.writeUTF("notpass");
}
}
}
catch(IOException e){
if(state!=null&&state.equals("pass")){
serverJFrame.text.append(matter.format(new Date())+socket.getInetAddress()+" 已登录数据库! "+"\n");
}
else{
serverJFrame.text.append(matter.format(new Date())+socket.getInetAddress()+" 已离开! "+"\n");
}
break;
}
}
}
}
class Renew extends Thread{
Server frame;
Renew(Server frame){
this.frame=frame;
}
public void run(){
File file=new File(frame.matter.format(new Date())+"record.dat");
FileWriter tofile=null;
BufferedWriter out=null;
try{
tofile=new FileWriter(file);
out=new BufferedWriter(tofile);
}
catch(IOException e){
}
while(true){
try{
sleep(2000000);
}
catch(InterruptedException e){
}
if(frame.text.getText().length()!=0){
try{
out.write(frame.text.getText(),0,frame.text.getText().length());
frame.text.setText(null);
out.flush();
}
catch(IOException e1){
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -