📄 tanke.txt
字号:
while(startServer){
if ( serverSocket.isClosed() == false ){
// get a new connection
sSocket = serverSocket.accept();
ServerControlFrame.outputInformation.append("Received New Connection.\n");
// test the sub thread whether stop or start, if stop, remove it
for (int i = 0 ; i < theClient.size(); i++){
if(((ServerSubThread)theClient.elementAt(i)).startThread == false ){
theClient.removeElementAt(i);
}
}
// start with sub thread of client
theClient.addElement(new ServerSubThread(sSocket, UDPServer, UDPPort));
((ServerSubThread)theClient.lastElement()).start();
}
else{
startServer = false;
}
}
}catch(IOException ioe){
if (serverSocket.isClosed() == false){
ioe.printStackTrace();
ServerControlFrame.outputInformation.append(ioe.toString());
}
}
}
/**
* close all port and close Server
*/
public void closeServer( ){
try{
for ( int i = 0; i < theClient.size(); i++){
if(((ServerSubThread)theClient.elementAt(i)).cSocket.isClosed() == false ){
((ServerSubThread)theClient.elementAt(i)).cSocket.close();
}
}
theClient.clear();
if (serverSocket.isClosed() == false) {
serverSocket.close();
}
UDPPort.leaveGroup(UDPServer);
if (UDPPort.isClosed() == false ) {
UDPPort.close();
}
}catch (IOException ioe){
ioe.printStackTrace();
}
}
}
package TankBattle;
import java.io.*;
/**
* <p>Title: Tank Game</p>
* <p>Description: SDIA csc829</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: Uni. Of Newcastle</p>
* @author David.Li
* @version 1.0
*/
public class NetworkServerThread extends Thread {
private NetworkServer ntServer;
private Thread serverThread;
/**
* constructor of thread, using for process connection
* @param ntServer
*/
public NetworkServerThread(NetworkServer ntServer) {
this.ntServer = ntServer;
}
/**
* init of thread
*/
public void start(){
serverThread = new Thread(this);
ntServer.startServer = true;
serverThread.start();
}
/**
* process the client connection
*/
public void run(){
ntServer.handleConnect();
}
/**
* if thread stop, then close the server all port
*/
public void finalize(){
ntServer.startServer = false;
serverThread = null;
ntServer.closeServer();
}
}
package TankBattle;
import java.io.*;
/**
* <p>Title: Tank Game</p>
* <p>Description: SDIA csc829</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: Uni. Of Newcastle</p>
* @author David.Li
* @version 1.0
*/
public class Parameter extends Exception {
protected String TCPServerAddress;
protected String UDPServerAddress;
protected int TCPServerPort;
protected int UDPServerPort;
/**
* constructor of parameter, get all address and port number from file
*/
public Parameter(){
try{
// get port and ip information from file
SocketFileOperate socketFile = new SocketFileOperate();
this.TCPServerAddress = socketFile.getTCPServerAddress();
this.TCPServerPort = socketFile.getTCPServerPort();
this.UDPServerAddress = socketFile.getUDPServerAddress();
this.UDPServerPort = socketFile.getUDPServerPort();
} catch (IOException ioe){
ioe.printStackTrace();
}
}
}
package TankBattle;
import javax.swing.UIManager;
import java.awt.*;
/**
* <p>Title: Tank Game</p>
* <p>Description: SDIA csc829</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: Uni. Of Newcastle</p>
* @author David.Li
* @version 1.0
*/
// this windows using JBuilder generate, for control server, please do not change
public class Server {
private boolean packFrame = false;
//Construct the application
public Server() {
ServerControlFrame frame = new ServerControlFrame();
//Validate frames that have preset sizes
//Pack frames that have useful preferred size info, e.g. from their layout
if (packFrame) {
frame.pack();
}
else {
frame.validate();
}
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
//Main method
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
new Server();
}
}
package TankBattle;
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import javax.swing.event.*;
/**
* <p>Title: Tank Game</p>
* <p>Description: SDIA csc829</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: Uni. Of Newcastle</p>
* @author David.Li
* @version 1.0
*/
// this frame using JBuilder generate, for control server, please do not change
public class ServerControlFrame extends JFrame {
NetworkServerThread serverThread;
JPanel contentPane;
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JLabel jLabel3 = new JLabel();
JLabel serverName = new JLabel();
JLabel serverIPAddress = new JLabel();
JScrollPane jScrollPane1 = new JScrollPane();
static JTextArea outputInformation = new JTextArea();
String localHostName;
//Construct the frame
public ServerControlFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
//setIconImage(Toolkit.getDefaultToolkit().createImage(ServerControlFrame.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
localHostName = new SocketFileOperate().getLocalHoseName();
jLabel1.setText("Server Name:");
jLabel1.setBounds(new Rectangle(46, 10, 75, 18));
contentPane.setLayout(null);
this.setResizable(false);
this.setSize(new Dimension(562, 362));
this.setTitle("Server Control ");
jLabel2.setText("Server IP Address:");
jLabel2.setBounds(new Rectangle(22, 37, 101, 18));
jButton1.setBounds(new Rectangle(62, 75, 97, 29));
jButton1.setText("Start Server");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jButton2.setBounds(new Rectangle(311, 73, 97, 29));
jButton2.setEnabled(false);
jButton2.setText("Stop Server");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
jLabel3.setText("Output Information:");
jLabel3.setBounds(new Rectangle(21, 115, 104, 18));
serverIPAddress.setText(new SocketFileOperate().getLocalIPAddress());
serverIPAddress.setBounds(new Rectangle(135, 33, 173, 25));
serverName.setText(localHostName);
serverName.setBounds(new Rectangle(134, 7, 184, 25));
jScrollPane1.setBounds(new Rectangle(25, 135, 497, 190));
outputInformation.setEditable(false);
contentPane.add(jLabel1, null);
contentPane.add(serverName, null);
contentPane.add(jLabel2, null);
contentPane.add(serverIPAddress, null);
contentPane.add(jButton2, null);
contentPane.add(jButton1, null);
contentPane.add(jLabel3, null);
contentPane.add(jScrollPane1, null);
jScrollPane1.getViewport().add(outputInformation, null);
}
//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
void jButton1_actionPerformed(ActionEvent e) {
SocketFileOperate socketFile = new SocketFileOperate();
serverThread = new NetworkServerThread(new NetworkServer());
serverThread.start();
jButton2.setEnabled(true);
jButton1.setEnabled(false);
}
void jButton2_actionPerformed(ActionEvent e) {
serverThread.finalize();
outputInformation.append("Server Close");
jButton1.setEnabled(true);
jButton2.setEnabled(false);
}
}
package TankBattle;
import java.io.*;
import java.net.*;
import java.util.*;
/**
* <p>Title: Tank Game</p>
* <p>Description: SDIA csc829</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: Uni. Of Newcastle</p>
* @author David.Li
* @version 1.0
*/
public class ServerSubThread extends Thread {
private String userName;
private String IPAddress;
private String cSingal;
private String inputMessage;
protected Socket cSocket;
protected boolean startThread;
private DataInputStream in;
private SocketUtil TCPServer;
private DatagramPacket sndPacket;
private MulticastSocket UDPPort;
private InetAddress UDPServer;
private Thread cServer;
/**
* constructor of this class
* @param cSocket - Socket port is used for connect with client
* @param UDPServer - UPD multicast address is used for run multicast
* @param UDPPort - UDP port is used for send multicast form this port
*/
public ServerSubThread(Socket cSocket, InetAddress UDPServer, MulticastSocket UDPPort) {
this.cSocket = cSocket;
this.UDPServer = UDPServer;
this.UDPPort = UDPPort;
TCPServer = new SocketUtil(cSocket);
}
/**
* init the thread of server
*/
public void start(){
this.cServer = new Thread(this);
cServer.start();
startThread = true;
}
/**
* start thread.
*/
public void run(){
inputMessage = null;
try{
while ((cSocket.isClosed()) == false){
if ( inputMessage == null ){
in = TCPServer.getDataStream();
inputMessage = in.readLine();
System.out.println(inputMessage);
StringTokenizer st = new StringTokenizer(inputMessage,"||");
cSingal = null;
if ( st.hasMoreTokens()){
cSingal = st.nextToken();
}
// Test input singal
// if signal = start, then show username and ip address
if (cSingal.equals("start")){
if (st.hasMoreTokens()){
userName = st.nextToken();
}
ServerControlFrame.outputInformation.append(userName+" has connect it\n");
sndPacket = new DatagramPacket(inputMessage.getBytes(),
inputMessage.getBytes().length,UDPServer,
new Parameter().UDPServerPort);
UDPPort.send(sndPacket);
}
// if signal = bye then disconnect with user
else if (cSingal.equals("bye")){
inputMessage = "bye" + "||" + userName + "||";
sndPacket = new DatagramPacket(inputMessage.getBytes(),
inputMessage.getBytes().length,UDPServer,
new Parameter().UDPServerPort);
UDPPort.send(sndPacket);
startThread = false;
ServerControlFrame.outputInformation.append(userName+" disconnect it\n");
in.close();
cSocket.close();
}
else if (cSingal == null){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -