在代码后面加注释解释

weixin_44295111 2019-12-09 11:07:04
import java.net.*;
import java.io.*;
import java.util.*;
public class OmokServer{
private ServerSocket server;
private BManager bMan=new BManager();
private Random rnd= new Random();
public OmokServer(){}
void startServer(){
try{
server=new ServerSocket(7777);
System.out.println("服务器已创建.");
while(true){
Socket socket=server.accept();//获取客户端套接字
Omok_Thread ot=new Omok_Thread(socket);//创建并启用线程
ot.start();
bMan.add(ot);
System.out.println("连接数: "+bMan.size());
}
}catch(Exception e){
System.out.println(e);
}
}
public static void main(String[] args){
OmokServer server=new OmokServer();
server.startServer();
}
class Omok_Thread extends Thread{//消息广播类
private int roomNumber=-1;
private String userName=null;
private Socket socket;
private boolean ready=false;
private BufferedReader reader;
private PrintWriter writer;
Omok_Thread(Socket socket){
this.socket=socket;
}
Socket getSocket(){
return socket;
}
int getRoomNumber(){
return roomNumber;
}
String getUserName(){
return userName;
}
boolean isReady(){
return ready;
}
public void run(){
try{
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer=new PrintWriter(socket.getOutputStream(), true);
String msg;
while((msg=reader.readLine())!=null){
if(msg.startsWith("[NAME]")){
userName=msg.substring(6);
}
else if(msg.startsWith("[ROOM]")){
int roomNum=Integer.parseInt(msg.substring(6));
if( !bMan.isFull(roomNum)){
if(roomNumber!=-1)
bMan.sendToOthers(this, "[EXIT]"+userName);
roomNumber=roomNum;
writer.println(msg);
writer.println(bMan.getNamesInRoom(roomNumber));
bMan.sendToOthers(this, "[ENTER]"+userName);
}
else writer.println("[FULL]");
}
else if(roomNumber>=1 && msg.startsWith("[STONE]"))
bMan.sendToOthers(this, msg);
else if(msg.startsWith("[MSG]"))
bMan.sendToRoom(roomNumber, "["+userName+"]: "+msg.substring(5));
else if(msg.startsWith("[START]")){
ready=true;
if(bMan.isReady(roomNumber)){
int a=rnd.nextInt(2);
if(a==0){
writer.println("[COLOR]BLACK");
bMan.sendToOthers(this, "[COLOR]WHITE");
}
else{
writer.println("[COLOR]WHITE");
bMan.sendToOthers(this, "[COLOR]BLACK");
}
}
}
else if(msg.startsWith("[STOPGAME]"))
ready=false;
else if(msg.startsWith("[DROPGAME]")){
ready=false;
bMan.sendToOthers(this, "[DROPGAME]");
}
else if(msg.startsWith("[WIN]")){
ready=false;
writer.println("[WIN]");
bMan.sendToOthers(this, "[LOSE]");
}
}
}catch(Exception e){
}finally{
try{
bMan.remove(this);
if(reader!=null) reader.close();
if(writer!=null) writer.close();
if(socket!=null) socket.close();
reader=null; writer=null; socket=null;
System.out.println(userName+"已断线.");
System.out.println("连接人数: "+bMan.size());
bMan.sendToRoom(roomNumber,"[DISCONNECT]"+userName);
}catch(Exception e){}
}
}
}
class BManager extends Vector{
BManager(){}
void add(Omok_Thread ot){
super.add(ot);
}
void remove(Omok_Thread ot){
super.remove(ot);
}
Omok_Thread getOT(int i){
return (Omok_Thread)elementAt(i);
}
Socket getSocket(int i){
return getOT(i).getSocket();
}
void sendTo(int i, String msg){
try{
PrintWriter pw= new PrintWriter(getSocket(i).getOutputStream(), true);
pw.println(msg);
}catch(Exception e){}
}
int getRoomNumber(int i){
return getOT(i).getRoomNumber();
}
synchronized boolean isFull(int roomNum){
if(roomNum==0)return false;
int count=0;
for(int i=0;i<size();i++)
if(roomNum==getRoomNumber(i))count++;
if(count>=2)return true;
return false;
}
void sendToRoom(int roomNum, String msg){
for(int i=0;i<size();i++)
if(roomNum==getRoomNumber(i))
sendTo(i, msg);
}
void sendToOthers(Omok_Thread ot, String msg){
for(int i=0;i<size();i++)
if(getRoomNumber(i)==ot.getRoomNumber() && getOT(i)!=ot)
sendTo(i, msg);
}
synchronized boolean isReady(int roomNum){
int count=0;
for(int i=0;i<size();i++)
if(roomNum==getRoomNumber(i) && getOT(i).isReady())
count++;
if(count==2)return true;
return false;
}
String getNamesInRoom(int roomNum){
StringBuffer sb=new StringBuffer("[PLAYERS]");
for(int i=0;i<size();i++)
if(roomNum==getRoomNumber(i))
sb.append(getOT(i).getUserName()+"\t");
return sb.toString();
}
}
}
...全文
9765 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
leijunyuncyuyan 2020-07-07
  • 打赏
  • 举报
回复
连接服务器发送指令

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧