gameserver.java
来自「手机游戏对战平台。自己做的一个东东。 支持多个手机联网打游戏;采用socket」· Java 代码 · 共 140 行
JAVA
140 行
package serverInf;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import model.PlatformState;
public class GameServer implements Runnable {
public int port;
public int maxclient;
public Sender[] senders;
public Receiver[] receivers;
public String[] UserName;
public Serializable message;
public ServerInterface serinf;
public int clientIndex;
ServerSocket serversocket = null;
public GameServer(int port, int maxClient, Serializable message,
ServerInterface serinf) {
this.port = port;
this.maxclient = maxClient;
this.senders = new Sender[maxClient];
this.receivers = new Receiver[maxClient];
this.UserName=new String[maxClient];
this.message = message;
this.serinf = serinf;
}
public void start(){
Thread t=new Thread(this);
t.start();
}
public synchronized void run() {
try {
serversocket = new ServerSocket(port);
System.out.println("Server:"+port+" Wait for connection...");
clientIndex = 0;
while (clientIndex < maxclient) {
DataInputStream is;
DataOutputStream os;
Socket clientsocket = serversocket.accept();
System.out.println("a client is accepted");
is = new DataInputStream(clientsocket.getInputStream());
os = new DataOutputStream(clientsocket.getOutputStream());
UserName[clientIndex]=is.readUTF();
System.out.println("User "+UserName[clientIndex]+" has logged in.");
senders[clientIndex] = new Sender(os);
serinf.getSenders(senders);
receivers[clientIndex] = new Receiver(clientIndex,is,this,UserName[clientIndex]);
clientIndex++;
}
for (int i=0;i<maxclient;i++){
while(senders[i].isReady()==false)
Thread.sleep(10);
}
for (int i=0;i<maxclient;i++){
while(receivers[i].isReady()==false)
Thread.sleep(10);
}
serinf.gameStart();
} catch (Exception e) {
System.out.println("error happen in gameserver's run(): "+e);
}
}
}
class Receiver implements Runnable {
private DataInputStream is = null;
private ServerInterface serinf = null;
private Serializable message = null;
private GameServer gameserver=null;
private int clientIndex;
private boolean ready=false;
private String userAccount=null;
public boolean isReady() {
return ready;
}
public String getUserAccount(){
return userAccount;
}
public Receiver(int clientIndex,DataInputStream is, GameServer gameserver,String userAccount) {
ready=false;
this.userAccount=userAccount;
this.clientIndex=clientIndex;
this.is = is;
this.serinf = gameserver.serinf;
this.message = gameserver.message;
this.gameserver=gameserver;
start();
}
public void start() {
Thread t = new Thread(this);
t.start();
}
public void run() {
synchronized (this) {
try {
ready = true;
while (true) {
message.deserialize(is);
serinf.reveiveMessage(message);
}
} catch (Exception e) {
PlatformState ps = new PlatformState();
ps.logout(userAccount);
serinf.illegalExit(userAccount);
System.out.println("close happen in receiver's run(): " + e);
if (gameserver.senders[this.clientIndex] != null) {
gameserver.senders[this.clientIndex].close();
}
gameserver.clientIndex--;
for (int i = this.clientIndex; i < gameserver.clientIndex; i++) {
gameserver.senders[i] = gameserver.senders[i + 1];
gameserver.receivers[i] = gameserver.receivers[i + 1];
}
gameserver.senders[gameserver.clientIndex] = null;
gameserver.serinf.getSenders(gameserver.senders);
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?