⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tanke.txt

📁 线程应用
💻 TXT
📖 第 1 页 / 共 3 页
字号:
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 + -