📄 serverframe.java
字号:
package gengjie;
import java.awt.*;
import javax.swing.*;
import com.borland.jbcl.layout.BoxLayout2;
import java.awt.Rectangle;
import com.borland.jbcl.layout.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Vector;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class ServerFrame extends JFrame {
JPanel contentPane;
JButton btnStart=new JButton();
JButton btnStop=new JButton();
XYLayout xYLayout1 = new XYLayout();
boolean bStopServer=false;
ServerThread serverThead;
public ServerFrame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
//界面布局设计
contentPane = (JPanel) getContentPane();
setSize(new Dimension(300, 220));
setTitle("聊天服务器");
btnStart.setText("启动服务");
btnStart.addActionListener(new ServerFrame_btnStart_actionAdapter(this));
btnStop.setText("停止服务");
btnStop.addActionListener(new ServerFrame_btnStop_actionAdapter(this));
contentPane.setLayout(xYLayout1);
contentPane.add(btnStart, new XYConstraints(102, 53, -1, -1));
contentPane.add(btnStop, new XYConstraints(102, 112, -1, -1));
this.btnStart.setEnabled(true);
this.btnStop.setEnabled(false);
}
//启动服务事件
public void btnStart_actionPerformed(ActionEvent e) {
try
{
this.bStopServer=false;
serverThead=new ServerThread(this);
this.btnStart.setEnabled(false);
this.btnStop.setEnabled(true);
}
catch(Exception ex)
{}
}
//停止服务事件
public void btnStop_actionPerformed(ActionEvent e) {
try
{
this.bStopServer=true;
serverThead.serverSocket.close();
this.btnStart.setEnabled(true);
this.btnStop.setEnabled(false);
}
catch(Exception ex)
{}
}
}
class ServerFrame_btnStop_actionAdapter implements ActionListener {
private ServerFrame adaptee;
ServerFrame_btnStop_actionAdapter(ServerFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnStop_actionPerformed(e);
}
}
class ServerFrame_btnStart_actionAdapter implements ActionListener {
private ServerFrame adaptee;
ServerFrame_btnStart_actionAdapter(ServerFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnStart_actionPerformed(e);
}
}
//服务线程
class ServerThread extends Thread
{
ServerSocket serverSocket;
Socket clientSocket;
DataInputStream in;
DataOutputStream out;
ServerFrame frame;
Vector vConnect;
ServerThread(ServerFrame frame)
{
this.frame = frame;
try
{
serverSocket = new ServerSocket(55555);
vConnect=new Vector();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"启动服务失败,"+e.getMessage(),"提示", JOptionPane.ERROR_MESSAGE);
return;
}
this.start();
}
public void run()
{
try
{
while(true)
{
if(frame.bStopServer)
break;
clientSocket = serverSocket.accept();
ListenThread listenThread=new ListenThread(this);
vConnect.addElement(listenThread);
}
}
catch(Exception e)
{
}
try
{
serverSocket.close();
}
catch(Exception e)
{
}
}
//发送接受到的消息到各个连接客户端
public synchronized void sendMessage(String message) {
try {
for (int i = 0; i < vConnect.size(); i++) {
ListenThread listenThread = (ListenThread) vConnect.elementAt(
i);
listenThread.out.writeUTF(message);
}
} catch (Exception e) {
return;
}
}
//移出脱离连接的客户端
public synchronized void removeConnect(ListenThread listenThread)
{
try
{
listenThread.clientSocket.close();
vConnect.removeElementAt(vConnect.indexOf(listenThread));
}catch(Exception e)
{
}
}
}
//侦听线程
class ListenThread extends Thread
{
ServerThread serverThread;
DataInputStream in;
DataOutputStream out;
Socket clientSocket;
ListenThread(ServerThread serverThread)
{
this.serverThread=serverThread;
this.clientSocket=serverThread.clientSocket;
try
{
in = new DataInputStream(clientSocket.getInputStream());
out = new DataOutputStream(clientSocket.getOutputStream());
clientSocket = serverThread.clientSocket;
}catch(Exception e)
{
}
this.start();
}
public void run()
{
String receive="";
while(true)
{
if(serverThread.frame.bStopServer)
{
break;
}
try
{
receive=in.readUTF();
serverThread.sendMessage(receive);
}
catch(Exception e)
{
break;
}
}
try
{
serverThread.removeConnect(this);
}
catch(Exception e)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -