📄 serverframe.java
字号:
/*
* ServerFrame.java
*
*
*/
/**
*
* @author codewar1
*/
import javax.swing.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class ServerFrame extends javax.swing.JFrame {
/** Creates new form ServerFrame */
public ServerFrame() {
initComponents();
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" 生成的代码 ">//GEN-BEGIN:initComponents
private void initComponents() {
jFileChooser1 = new javax.swing.JFileChooser();
jFileChooser2 = new javax.swing.JFileChooser();
jFileChooser3 = new javax.swing.JFileChooser();
jPanel1 = new javax.swing.JPanel();
jMsg = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
jShow = new javax.swing.JTextArea();
jShow.setEditable(false);
jStart = new javax.swing.JButton();
jSend = new javax.swing.JButton();
jSeparator1 = new javax.swing.JSeparator();
jStop = new javax.swing.JButton();
jStop.setEnabled(false);
jsendfile = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jfileShow = new javax.swing.JTextArea();
getContentPane().setLayout(new java.awt.FlowLayout());
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("myChatServer");
setBackground(new java.awt.Color(255, 153, 51));
setName("myChat");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosed(java.awt.event.WindowEvent evt) {
formWindowClosed(evt);
}
});
jPanel1.setBackground(new java.awt.Color(0, 51, 51));
jMsg.setBackground(new java.awt.Color(153, 153, 0));
jMsg.setColumns(20);
jMsg.setEnabled(false);
jShow.setBackground(new java.awt.Color(204, 204, 204));
jShow.setColumns(20);
jShow.setEditable(false);
jShow.setRows(5);
jScrollPane1.setViewportView(jShow);
jStart.setForeground(new java.awt.Color(255, 0, 0));
jStart.setText("Start");
jStart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jStartActionPerformed(evt);
}
});
jSend.setText("SendMsg");
jSend.setEnabled(false);
jSend.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jSendActionPerformed(evt);
}
});
jStop.setText("Stop");
jStop.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jStopActionPerformed(evt);
}
});
jsendfile.setText("SendFiles");
jsendfile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jsendfileActionPerformed(evt);
}
});
jfileShow.setBackground(new java.awt.Color(204, 204, 204));
jfileShow.setColumns(20);
jfileShow.setEditable(false);
jfileShow.setRows(5);
jScrollPane2.setViewportView(jfileShow);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(22, 22, 22)
.addComponent(jMsg, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(23, 23, 23)
.addComponent(jSend)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jsendfile))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(17, 17, 17)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 468, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 270, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jStart)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jStop))
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 172, javax.swing.GroupLayout.PREFERRED_SIZE))))))
.addContainerGap(0, Short.MAX_VALUE))
);
jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jSend, jStart, jStop, jsendfile});
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 134, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jStop)
.addComponent(jStart)))
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 163, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(17, 17, 17)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jsendfile)
.addComponent(jSend)
.addComponent(jMsg, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(46, 46, 46))
);
getContentPane().add(jPanel1);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jsendfileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jsendfileActionPerformed
startFileServer();
}//GEN-LAST:event_jsendfileActionPerformed
private void jStopActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jStopActionPerformed
stopServer(); // TODO 将在此处添加您的处理代码:
}//GEN-LAST:event_jStopActionPerformed
private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
stopServer();
// System.exit(0);//停止程序,退出服务
}//GEN-LAST:event_formWindowClosed
private void jSendActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jSendActionPerformed
sendMsg();//发送消息
}//GEN-LAST:event_jSendActionPerformed
private void jStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jStartActionPerformed
startServer();//启动服务
}//GEN-LAST:event_jStartActionPerformed
/**
* @param args the command line arguments
*/
/*public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ServerFrame().setVisible(true);
}
});
}*/
public void startServer()
{
try
{
InetAddress ip = InetAddress.getLocalHost();
serverSocket = new ServerSocket(8000,5,ip);
jShow.append("Severt start at 8000 port ...\n");//show help message
jStart.setEnabled(false);
jStop.setEnabled(true);
//init the componient
jMsg.setEnabled(true);
jSend.setEnabled(true);
}
catch(Exception e)
{
System.exit(0);
}
user = new client();//init user
//start listenthread
listenThread = new ServerListenThread(
serverSocket,
jMsg,
jShow,
user
);
listenThread.start();
}
public void stopServer()
{
try
{
sendServerStop();
listenThread.isStop = true;
serverSocket.close();
while(user.k != 0)
{
user.input.close();
user.output.close();
user.socket.close();
user.k = 0;
}
jStart.setEnabled(true);
jStop.setEnabled(false);
jMsg.setEnabled(false);
}
catch(Exception e)
{
}
}
public void sendServerStop()
{
jShow.append("Server is stopped");
// while(user.k != 0)
// {
try
{
//user.output.write("系统关闭".getBytes());
//user.output.writeObject("系统关闭");
user.output.writeObject(user.encrypt("shutdown"));
user.output.flush();//send message
}
catch (Exception e)
{}
// }
}
public void sendMsg()
{
String msg = jMsg.getText();//get msg
try
{
jShow.append("server:"+msg+"\n");
// user.output.writeObject("服务器");
// user.output.write("服务器".getBytes());
user.output.writeObject(user.encrypt("服务器"));
user.output.flush();//刷新缓冲区 发送昵称
// user.output.writeObject(msg);
// user.output.write(msg.getBytes());
user.output.writeObject(user.encrypt(msg));
user.output.flush();//发送消息
jMsg.setText("");
}
catch(Exception e)
{}
}
public String read(){
String string = null;
try
{
int bytesAvailable = user.input.available();
if (bytesAvailable > 0)
{
byte[] bytes = new byte[bytesAvailable];
user.input.read(bytes);
string = new String(bytes);
}
}
catch(Exception e)
{}
return string;
}
public void startFileServer(){
String filepath = null;
JFileChooser chooser = new JFileChooser();
//对话框选择文件
chooser.setCurrentDirectory(new File("."));
int k = chooser.showOpenDialog(ServerFrame.this);
if ( k == JFileChooser.APPROVE_OPTION)
{
filepath = chooser.getSelectedFile().getPath();
}
fileThread = new fileServer(
jfileShow,//文件线程
filepath
);
fileThread.start();//启动
//String filename =
}
// 变量声明 - 不进行修改//GEN-BEGIN:variables
private javax.swing.JFileChooser jFileChooser1;
private javax.swing.JFileChooser jFileChooser2;
private javax.swing.JFileChooser jFileChooser3;
private javax.swing.JTextField jMsg;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JButton jSend;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTextArea jShow;
private javax.swing.JButton jStart;
private javax.swing.JButton jStop;
private javax.swing.JTextArea jfileShow;
private javax.swing.JButton jsendfile;
// 变量声明结束//GEN-END:variables
private ServerSocket serverSocket;
private client user;
private ServerListenThread listenThread;
private fileServer fileThread;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -