亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? omokserver.java

?? Java Swing開發的網絡對戰五子棋游戲
?? JAVA
字號:

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();
		//向bMain添加線程
		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) {
		    //若msg以【NAME】開始
		    if (msg.startsWith("[NAME]")) {
			userName = msg.substring(6);
		    } //若msg以【ROOM】開始,則設定房間
		    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]");
			}
		    } 
		    //將【STONE】消息傳遞給對方
		    else if (roomNumber >= 1 && msg.startsWith("[STONE]")) {
			bMan.sendToOthers(this, msg);
		    } 
		    //向房間傳送對話消息
		    else if (msg.startsWith("[MSG]")) {
			bMan.sendToRoom(roomNumber, "[" + userName + "]: " + msg.substring(5));
		    } 
		    //若msg以【START】開始
		    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) {
		e.printStackTrace();
	    } 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);
	}
	//獲取第i個線程
	Omok_Thread getOT(int i) {
	    return (Omok_Thread) elementAt(i);
	}
	//獲取第i個線程的套接字
	Socket getSocket(int i) {
	    return getOT(i).getSocket();
	}
	//向與第i個線程連接的客戶機發送消息
	void sendTo(int i, String msg) {
	    try {
		PrintWriter pw = new PrintWriter(getSocket(i).getOutputStream(), true);
		pw.println(msg);
	    } catch (Exception e) {
	    }
	}
	//獲取第i個線程的房間號
	int getRoomNumber(int i) {
	    return getOT(i).getRoomNumber();
	}
	//判斷房間是否滿員
	synchronized boolean isFull(int roomNum) {
	    //待機室未滿
	    if (roomNum == 0) {
		return false;
	    }
	    //其他房間不允許2名以上進入
	    int count = 0;
	    for (int i = 0; i < size(); i++) {
		if (roomNum == getRoomNumber(i)) {
		    count++;
		}
	    }
	    if (count >= 2) {
		return true;
	    }
	    return false;
	}
	//向roomNum房間發送msg
	void sendToRoom(int roomNum, String msg) {
	    for (int i = 0; i < size(); i++) {
		if (roomNum == getRoomNumber(i)) {
		    sendTo(i, msg);
		}
	    }
	}
	//向與ot在同一房間的其他用戶發送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);
		}
	    }
	}
	//判斷是否已經做好游戲開始的準備
	//若兩名用戶同時做好了游戲開始的準備,則返回true
	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;
	}
	//獲取roomNum房間中用戶的名字
	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();
	}
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区综合| 在线一区二区三区四区五区 | 亚洲色图欧洲色图| 成人丝袜高跟foot| 亚洲欧洲精品一区二区三区不卡| jiyouzz国产精品久久| 国产午夜精品在线观看| 91日韩精品一区| 综合色中文字幕| 91亚洲男人天堂| 亚洲一区二区三区激情| 欧美精品日日鲁夜夜添| 美女视频黄免费的久久 | 日韩欧美国产三级电影视频| 日本亚洲免费观看| 精品久久久久久最新网址| 黄色小说综合网站| 日本一区二区久久| 成人av高清在线| 一区二区理论电影在线观看| 欧美午夜精品久久久久久孕妇| 日韩精品1区2区3区| 26uuu另类欧美亚洲曰本| 风间由美一区二区av101| 一区二区三区四区激情| 日韩免费高清av| 91在线观看一区二区| 亚洲一级不卡视频| www成人在线观看| 色婷婷综合久久久久中文| 青青草97国产精品免费观看| 亚洲国产精品精华液ab| 欧美理论片在线| 国产a精品视频| 日韩在线卡一卡二| 综合色中文字幕| 精品入口麻豆88视频| 欧美视频你懂的| 中文字幕久久午夜不卡| 欧美午夜不卡视频| 国产一区二区0| 亚洲一区二区黄色| 亚洲国产高清aⅴ视频| 欧美二区三区的天堂| 99久久99久久精品免费观看| 免费成人在线播放| 亚洲另类色综合网站| 久久亚洲一级片| 在线视频综合导航| 国产不卡在线视频| 狂野欧美性猛交blacked| 亚洲人精品午夜| 久久久久久毛片| 欧美日本精品一区二区三区| 91色porny在线视频| 国产99久久精品| 久久精品噜噜噜成人av农村| 亚洲观看高清完整版在线观看 | 久久久精品日韩欧美| 欧美性生活一区| 99国产精品久久久久久久久久| 美女一区二区三区在线观看| 亚洲国产美女搞黄色| 国产精品乱码一区二三区小蝌蚪| 精品国产乱码久久久久久浪潮 | 欧美理论电影在线| 色综合久久中文字幕综合网| 国产成人精品一区二区三区网站观看| 欧美a一区二区| 亚洲不卡av一区二区三区| 亚洲日本va午夜在线电影| 国产婷婷色一区二区三区 | 欧美在线free| 一本到三区不卡视频| 国产成人综合在线| 国产老女人精品毛片久久| 久久综合色婷婷| 日韩欧美中文一区| 777奇米成人网| 欧美女孩性生活视频| 亚洲欧美日韩系列| 国产精品你懂的在线欣赏| 精品日韩一区二区三区 | 91免费在线看| 99riav一区二区三区| 成人午夜视频福利| 不卡的av网站| 99久久精品国产导航| 色综合夜色一区| 欧美亚洲一区三区| 欧美高清性hdvideosex| 69精品人人人人| 欧美久久久久久久久久| 欧美日本一道本| 精品成a人在线观看| 久久综合丝袜日本网| 国产午夜精品久久| **欧美大码日韩| 亚洲男同性恋视频| 日韩高清中文字幕一区| 美日韩一级片在线观看| 国产91富婆露脸刺激对白| 成人爱爱电影网址| 欧美性猛交xxxxxxxx| 制服丝袜日韩国产| 精品免费99久久| 国产精品麻豆一区二区| 一区二区三区在线视频观看| 日本欧美韩国一区三区| 国产精品一区免费视频| 色哟哟欧美精品| 91精品国产综合久久精品app| 精品av久久707| 欧美韩国日本不卡| 亚洲第一电影网| 极品少妇一区二区三区精品视频| 顶级嫩模精品视频在线看| 91久久一区二区| 日韩精品最新网址| 国产精品乱人伦一区二区| 婷婷夜色潮精品综合在线| 国产一区不卡在线| 欧美日韩一区三区四区| 久久网站最新地址| 亚洲综合男人的天堂| 精品一区二区成人精品| 色综合天天做天天爱| 欧美电影免费观看高清完整版在 | 99久久国产综合精品麻豆| 欧美日韩免费一区二区三区| 久久久久久毛片| 天堂久久一区二区三区| 99在线精品一区二区三区| 51午夜精品国产| 中文字幕一区二区三| 免播放器亚洲一区| 91色porny蝌蚪| 国产亚洲欧美日韩在线一区| 亚洲第一电影网| 91网站在线播放| 久久欧美中文字幕| 同产精品九九九| 色狠狠av一区二区三区| 国产精品水嫩水嫩| 狠狠色丁香婷婷综合| 欧美性大战久久| 日韩美女精品在线| 成人性生交大片免费| 日韩精品在线一区| 亚洲成a人v欧美综合天堂 | 色又黄又爽网站www久久| 国产人伦精品一区二区| 久久精品噜噜噜成人av农村| 欧美在线综合视频| 最新热久久免费视频| 国产不卡一区视频| 久久久久久久久久久99999| 天天综合色天天综合色h| 色欧美片视频在线观看在线视频| 欧美经典一区二区| 国内精品在线播放| 精品久久久久久久久久久久包黑料| 一区二区三区欧美日| 91网站视频在线观看| 综合色天天鬼久久鬼色| 99久久精品费精品国产一区二区| 中文一区一区三区高中清不卡| 国产精品中文有码| 国产日韩欧美在线一区| 国产精品66部| 国产拍欧美日韩视频二区| 国产福利精品导航| 日本一二三四高清不卡| 成人av免费网站| 亚洲视频免费在线| 色婷婷av一区二区三区软件| 亚洲女同一区二区| 日本久久电影网| 亚洲午夜一区二区| 欧美日韩中字一区| 视频一区二区三区在线| 91精品国产综合久久香蕉的特点| 首页亚洲欧美制服丝腿| 91精品国产欧美日韩| 捆绑调教一区二区三区| 久久久国产精品麻豆| 成人午夜大片免费观看| 一区二区三区四区乱视频| 欧美久久久久中文字幕| 激情六月婷婷综合| 国产人伦精品一区二区| 色88888久久久久久影院野外| 亚洲午夜激情网页| 日韩免费观看高清完整版| 国产精品456| 一区二区三区欧美日韩| 日韩视频中午一区| 波多野洁衣一区| 日韩激情一区二区| 国产日韩精品一区二区浪潮av|