📄 server.java
字号:
package Chat;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
//import java.net.ServerSocket;
//import java.net.Socket;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Server extends JFrame implements Runnable{
private JPanel jServerPanel = null;
private JLabel jPortLabel = null;
private JTextField jPortTextField = null;
private JButton jConnButton = null;
private JButton jDisConnButton = null;
private JLabel jSendLabel = null;
private JScrollPane jSendScrollPane = null;
private JLabel jReceivedLabel = null;
private JScrollPane jReceivedScrollPane = null;
private JTextArea jSendTextArea = null;
private JTextArea jReceivedTextArea = null;
private JButton jSendButton = null;
private JButton jClearButton = null;
private JLabel jStateLabel = null;
private JTextField jStateTextField = null;
private ServerSocket server;
private Socket socket = null;
private boolean conState=false;
private Thread chatThread;
private PrintWriter out;
private BufferedReader in=null;
private boolean runState;
/**
* This method initializes
*
*/
public Server() {
super();
initialize();
this.setLocation(200, 100);
this.setVisible(true);
}
/**
* This method initializes this
*
*/
private void initialize() {
this.setSize(new Dimension(417, 375));
this.setContentPane(getJServerPanel());
this.setTitle("通信系统服务器端");
}
/**
* This method initializes jServerPanel
*
* @return javax.swing.JPanel
*/
private JPanel getJServerPanel() {
if (jServerPanel == null) {
jStateLabel = new JLabel();
jStateLabel.setBounds(new Rectangle(8, 54, 65, 27));
jStateLabel.setText("系统状态:");
jReceivedLabel = new JLabel();
jReceivedLabel.setBounds(new Rectangle(11, 191, 83, 25));
jReceivedLabel.setText("信息记录:");
jSendLabel = new JLabel();
jSendLabel.setBounds(new Rectangle(9, 95, 78, 24));
jSendLabel.setText("发送信息:");
jPortLabel = new JLabel();
jPortLabel.setBounds(new Rectangle(8, 21, 64, 27));
jPortLabel.setText("端口号:");
jServerPanel = new JPanel();
jServerPanel.setLayout(null);
jServerPanel.add(jPortLabel, null);
jServerPanel.add(getJPortTextField(), null);
jServerPanel.add(getJConnButton(), null);
jServerPanel.add(getJDisConnButton(), null);
jServerPanel.add(jSendLabel, null);
jServerPanel.add(getJSendScrollPane(), null);
jServerPanel.add(jReceivedLabel, null);
jServerPanel.add(getJReceivedScrollPane(), null);
jServerPanel.add(getJSendButton(), null);
jServerPanel.add(getJClearButton(), null);
jServerPanel.add(jStateLabel, null);
jServerPanel.add(getJStateTextField(), null);
}
return jServerPanel;
}
/**
* This method initializes jPortTextField
*
* @return javax.swing.JTextField
*/
private JTextField getJPortTextField() {
if (jPortTextField == null) {
jPortTextField = new JTextField();
jPortTextField.setBounds(new Rectangle(71, 19, 108, 30));
jPortTextField.setText("30000");
}
return jPortTextField;
}
/**
* This method initializes jConnButton
*
* @return javax.swing.JButton
*/
private JButton getJConnButton() {
if (jConnButton == null) {
jConnButton = new JButton();
jConnButton.setBounds(new Rectangle(195, 17, 90, 33));
jConnButton.setText("准备连接");
jConnButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(conState==true){
JOptionPane.showMessageDialog(jServerPanel,"清先断开连接",
"清先断开连接",JOptionPane.ERROR_MESSAGE);
}
else{
serverListen();
}
}
});
}
return jConnButton;
}
/**
* This method initializes jDisConnButton
*
* @return javax.swing.JButton
*/
private JButton getJDisConnButton() {
if (jDisConnButton == null) {
jDisConnButton = new JButton();
jDisConnButton.setBounds(new Rectangle(295, 17, 90, 33));
jDisConnButton.setText("断开连接");
jDisConnButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(conState==false){
JOptionPane.showMessageDialog(jServerPanel,"连接还没有建立",
"连接还没有建立",JOptionPane.ERROR_MESSAGE);
}
else{
try{
// jStateTextField.setText("等待接收客户端");
// repaint();
out.println("Server exit!");
out.flush();
jReceivedTextArea.insert("\n", 0);
jReceivedTextArea.insert("Server exit!", 0);
// Thread.sleep(500);
// disConnect();
stopRun();
}catch(Exception exception){
jStateTextField.setText("无法断开连接");
}
}
}
});
}
return jDisConnButton;
}
/**
* This method initializes jSendScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJSendScrollPane() {
if (jSendScrollPane == null) {
jSendScrollPane = new JScrollPane();
jSendScrollPane.setBounds(new Rectangle(9, 119, 271, 63));
jSendScrollPane.setViewportView(getJSendTextArea());
}
return jSendScrollPane;
}
/**
* This method initializes jReceivedScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJReceivedScrollPane() {
if (jReceivedScrollPane == null) {
jReceivedScrollPane = new JScrollPane();
jReceivedScrollPane.setBounds(new Rectangle(10, 215, 381, 103));
jReceivedScrollPane.setViewportView(getJReceivedTextArea());
}
return jReceivedScrollPane;
}
/**
* This method initializes jSendTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJSendTextArea() {
if (jSendTextArea == null) {
jSendTextArea = new JTextArea();
/*
jSendTextArea.addKeyListener(
new java.awt.event.KeyListener(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==e.VK_ENTER){
if(jSendTextArea.getText().equals("")){
JOptionPane.showMessageDialog(jServerPanel,"输入内容为空",
"输入内容为空",JOptionPane.ERROR_MESSAGE);
}
else if(conState==true){
sendInformation();
jSendTextArea.setText("");
}
else{
JOptionPane.showMessageDialog(jServerPanel,"还没有连接客户端",
"还没有连接客户端",JOptionPane.ERROR_MESSAGE);
}
}
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
}
);
*/
}
return jSendTextArea;
}
/**
* This method initializes jReceivedTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJReceivedTextArea() {
if (jReceivedTextArea == null) {
jReceivedTextArea = new JTextArea();
}
return jReceivedTextArea;
}
/**
* This method initializes jSendButton
*
* @return javax.swing.JButton
*/
private JButton getJSendButton() {
if (jSendButton == null) {
jSendButton = new JButton();
jSendButton.setBounds(new Rectangle(299, 120, 70, 23));
jSendButton.setText("发送");
jSendButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(jSendTextArea.getText().equals("")){
JOptionPane.showMessageDialog(jServerPanel,"输入内容为空",
"输入内容为空",JOptionPane.ERROR_MESSAGE);
}
else if(conState==true){
sendInformation();
jSendTextArea.setText("");
}
else{
JOptionPane.showMessageDialog(jServerPanel,"还没有连接客户端",
"还没有连接客户端",JOptionPane.ERROR_MESSAGE);
}
}
});
}
return jSendButton;
}
/**
* This method initializes jClearButton
*
* @return javax.swing.JButton
*/
private JButton getJClearButton() {
if (jClearButton == null) {
jClearButton = new JButton();
jClearButton.setBounds(new Rectangle(299, 155, 70, 23));
jClearButton.setText("清空");
jClearButton.addActionListener(
new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
jReceivedTextArea.setText("");
}
}
);
}
return jClearButton;
}
/**
* This method initializes jStateTextField
*
* @return javax.swing.JTextField
*/
private JTextField getJStateTextField() {
if (jStateTextField == null) {
jStateTextField = new JTextField();
jStateTextField.setBounds(new Rectangle(73, 54, 312, 27));
jStateTextField.setText("准备就绪,等待接收客户端");
jStateTextField.setEditable(false);
}
return jStateTextField;
}
public void run(){
String msg;
runState=true;
while(runState){
try{
msg=in.readLine();
if(msg.equals("Client exit!")){//server exit
processMsg(msg);
stopRun();//终止线程
}else if(msg!=null){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str =(df.format(new Date()));
processMsg("Client: "+str+"\n"+msg);
}
Thread.sleep(500);
}
catch(Exception e){
}
}
//endConnect();
try{//服务器退出关闭连接和相关的"流"
jStateTextField.setText("断开连接");
socket.close();
server.close();
in.close();
out.close();
socket=null;
server=null;
}
catch(IOException ioe){}
}
public void processMsg(String msg){//客户端处理消息
//jReceivedTextArea.append(msg);
//jReceivedTextArea.append("\n");
jReceivedTextArea.insert("\n", 0);
jReceivedTextArea.insert(msg, 0);
}
public void sendInformation(){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str =(df.format(new Date()));
out.println(jSendTextArea.getText());
processMsg("Server: "+str+"\n"+jSendTextArea.getText());
out.flush();
}
public void stopRun(){//to stop the running thread
runState=false;
conState=false;
// disConnect();
}
/*
public void disConnect(){
try{
socket.close();
server.close();
server = null;
socket = null;
conState=false;
jStateTextField.setText("断开连接");
}catch(Exception exception){
exception.printStackTrace();
}
}
*/
public void serverListen(){
try{
// jStateTextField.setText("等待接收客户端");
// repaint();
server = new ServerSocket(Integer.parseInt(jPortTextField.getText()), 5);
socket = server.accept();
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(socket.getOutputStream());
conState=true;
jStateTextField.setText("建立连接,来自:"+socket.getInetAddress().getHostAddress());
}catch(Exception exception){
exception.printStackTrace();
jStateTextField.setText("建立连接失败");
}
chatThread=new Thread(this);
chatThread.start();
// run();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Server server=new Server();
server.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} // @jve:decl-index=0:visual-constraint="10,11"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -