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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? chatserver.java

?? java 制作的聊天程序
?? JAVA
字號(hào):
import java.net.*;
import java.io.*;
import java.util.*;

/***************************************************************************
*
*   Created by:  Christian Ricci
*   Started:     March 17, 2000
*   See also:    chatadmin.java, chatapplet.java
*  
*   My chatserver program is designed to be used with a chat applet.  
*   However, there is no reason a person with a telnet client, connecting 
*   to the configured port couldn't utilize this application.
*
*   There are three classes in this .java file: chatserver, broadcaster and
*   listener.
*
***************************************************************************/

/***************************************************************************
* 
* - chatserver, parent class.  Listens for a connection on the comm
*   port, passed in the argument list.  An incoming connection causes
*   this application to spawn a listener and broadcaster thread.  There
*   can be many simultaneous instances of this application running at
*   any given time.
*
***************************************************************************/

public class ChatServer {

/***************************************************************************
*   method: swrite -- rudimentary communications for the chatserver class
***************************************************************************/

    public static void swrite(Socket sock, String str) throws Exception {

	OutputStream outStream = sock.getOutputStream();
	outStream.write(str.getBytes());
	outStream.flush();

    }

/***************************************************************************
*   method: main 
***************************************************************************/

    public static void main(String args[]) throws Exception {

	//
	// Communications
	//

	Listener listenHandle   = null;
	Broadcaster broadHandle = null;
	PipedInputStream in     = new PipedInputStream();
	PipedOutputStream out   = new PipedOutputStream(in);
	ServerSocket server     = new ServerSocket(Integer.parseInt(args[0]));
	InputStream inStream;
	BufferedReader inReader;
	Socket sock;

	//
	// tmpVars and output strings
	//

	int counter             = -1;
	long tmpKey;
	String name, systemOut;

	System.out.println("Chat Server Running");
	while (true) {

		//
		// Get, open new connection
		//

		sock = server.accept();
		inReader = new BufferedReader(
			   new InputStreamReader(
			     sock.getInputStream()));

		//
		// Get name of participant
		//

		swrite(sock, "Name? ");
		name = inReader.readLine();
		tmpKey = (new Date()).getTime();

		//	
		// Either start threads or add connections
		//

		if (counter == -1) {

			broadHandle = 
			  new Broadcaster(sock, in, tmpKey, name);
			listenHandle = 
			  new Listener(sock, out, tmpKey, name, broadHandle);

			Thread t1 = new Thread(listenHandle);
			Thread t2 = new Thread(broadHandle);

			t1.start();
			t2.start();

		} else {

			listenHandle.addSock(sock, tmpKey, name);
			broadHandle.addSock(sock, tmpKey, name);

		}

		//
		// Get current number of connections
		//

		counter = listenHandle.numSocks();

		systemOut = "Added User : " + name + " (" + counter + ")";
		System.out.println(systemOut);

	}

    }

}


/***************************************************************************
* 
* - Broadcaster, output thread.  Spawned by chatserver.  Keeps a hash-
*   table of the outputstreams associated with this each connection.
*   A PipedInputStream passes communications to this thread class
*   (spawned as a thread) from the Listener thread.  When commun-
*   ications passes thru this pipe, it enumerates thru the hashtable,
*   sending the message and user name to each connection.
*
***************************************************************************/

class Broadcaster implements Runnable {

    //
    // Global vars
    //

    Hashtable sockHash = new Hashtable();
    InputStream in;
    private Socket sock;
    private PrintWriter ostr;

/***************************************************************************
*   method: constructor -- call addSock, setup InputStream
***************************************************************************/

    public Broadcaster(Socket sock, InputStream in, long i, String name) 
	throws IOException {

	this.in = in;
	addSock(sock, i, name);

    }
    
/***************************************************************************
*   method: bCast -- Performs actual output (to a PrintWriter, see note).
***************************************************************************/

    private void bCast(String s) throws IOException {
	PrintWriter os;

	for (Enumeration e = sockHash.elements() ; e.hasMoreElements() ;) {

		os = (PrintWriter)e.nextElement();
		os.println(s);
		os.flush();

	}

    }

/***************************************************************************
*   method: addSock -- Adds a new connection to the hashtable, bCast user.
***************************************************************************/

    public void addSock(Socket sock, long i, String name) 
	throws IOException {

	ostr = new PrintWriter(new OutputStreamWriter(sock.getOutputStream()));
	sockHash.put(Long.toString(i), ostr);

	try {

		bCast(name + " has joined.");

	}
	catch (Exception e) {

		e.printStackTrace();

	}

    }

/***************************************************************************
*   method: delSock -- Removes a connection in the hashtable.
***************************************************************************/

    public void delSock(Object hKey) throws IOException {

	sockHash.remove(hKey);

    }

/***************************************************************************
*   method: run -- Main thread activity, loopty
***************************************************************************/

    public void run() {

	BufferedReader istr = new BufferedReader(new InputStreamReader(in));
	try {
		while (true) {
			bCast(istr.readLine());
		}
	}
	catch (Exception e) {
		e.printStackTrace();
	}

    }

}


/***************************************************************************
*
* - Listener, input thread.  Like the Broadcaster thread, the Listener
*   thread maintains a hashtable for each of the current connections.
*   It enumerates thru the connections, checking for incoming messages
*   and passes them through a PipedOutputStream to the Broadcaster
*   thread.
*
***************************************************************************/

class Listener implements Runnable {

    //
    // Global vars
    //

    Hashtable sockHash = new Hashtable();
    Hashtable nameHash = new Hashtable();
    OutputStream out;
    Broadcaster broadHandle;
    private Socket sock;
    private BufferedReader istr;

/***************************************************************************
*   method: constructor -- call addSock, setup connection to Broadcaster
***************************************************************************/

    public Listener(Socket sock, OutputStream out, 
	long i, String name, Broadcaster broadHandle) throws IOException {

	this.broadHandle = broadHandle;
	this.out = out;
	addSock(sock, i, name);

    }

/***************************************************************************
*   method: addSock -- Adds a new connection to the hashtable.
***************************************************************************/

    public void addSock(Socket sock, long i, String name) throws IOException {

	istr = new BufferedReader(new InputStreamReader(sock.getInputStream()));
	sockHash.put(Long.toString(i), istr);
	nameHash.put(Long.toString(i), name);

    }

/***************************************************************************
*   method: numSocks -- Returns number of known connections.
***************************************************************************/

    public int numSocks() {

	return sockHash.size();

    }

/***************************************************************************
*   method: delSock -- Removes a connection in the hashtable.  Output 
*                      disconnect.
***************************************************************************/

    public void delSock(Object hKey) throws IOException {

	String systemOut;
	String tmpName = (String)nameHash.get(hKey);
	String tmpStr = tmpName + " has left.\n";

	//
	// Connection over to broadcaster thread
	//

	broadHandle.delSock(hKey);	

	//
	// Close socket
	//

	BufferedReader tmpBfr = (BufferedReader)sockHash.get(hKey);
	tmpBfr.close();

	//
	// Clean out hashtable entries
	//

	sockHash.remove(hKey);
	nameHash.remove(hKey);

	//
	// Broadcast departure
	//

	out.write(tmpStr.getBytes());

	systemOut = "Removed User : " + tmpName + " (" + nameHash.size() + ")";
	System.out.println(systemOut);

    }

/***************************************************************************
*   method: run -- Main thread activity, loopty
***************************************************************************/

    public void run() {

	String tmpStr, tmpName, tmpInput;
	String exitStr = new String("exit");
	Object tmpKey;
	BufferedReader tmpBfr;

	try {

	while (true) {

	//
	// Loop thru hash table looking for input that is ready to be
	// posted.
	//

	for (Enumeration e = sockHash.keys() ; e.hasMoreElements() ;) {
		tmpKey = e.nextElement();
		tmpBfr = (BufferedReader)sockHash.get(tmpKey);
		if (tmpBfr.ready()) {
			tmpInput = tmpBfr.readLine();
			if (tmpInput.compareToIgnoreCase(exitStr) == 0) {
				delSock(tmpKey);
			} else if (tmpInput != "") {
				tmpName = (String)nameHash.get(tmpKey);
				tmpStr = tmpName + " : " + tmpInput + "\n";
				out.write(tmpStr.getBytes());
			}
		}
	}

	}

	} 
	catch (Exception e) {
		e.printStackTrace();
	}

    }
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美体内she精高潮| 欧美色电影在线| 亚洲国产成人va在线观看天堂| 欧美一区二区三区系列电影| 9i看片成人免费高清| 午夜精品免费在线| 国产精品色在线| 欧美大片在线观看一区二区| 色婷婷久久久久swag精品| 香蕉久久夜色精品国产使用方法| 久久久久久久久久美女| 欧美精品乱码久久久久久按摩| 成人激情校园春色| 久久99国产精品免费| 午夜精品久久久久久久久久久 | 视频一区二区不卡| 国产精品电影一区二区| 精品久久99ma| 在线播放亚洲一区| 欧美视频在线一区| 在线观看日韩毛片| 91色九色蝌蚪| 95精品视频在线| 成人综合日日夜夜| 国产一区二区三区免费播放| 日韩av不卡在线观看| 亚洲国产va精品久久久不卡综合| 亚洲欧洲三级电影| 国产精品天干天干在观线 | 亚洲午夜久久久久中文字幕久| 国产日韩欧美麻豆| 久久影院电视剧免费观看| 日韩一级大片在线| 7777精品伊人久久久大香线蕉的| 在线影院国内精品| 欧美亚洲自拍偷拍| 欧美日韩一区小说| 欧美男男青年gay1069videost| 一本到一区二区三区| 91视视频在线观看入口直接观看www| 成人性视频网站| 成人av电影观看| 91香蕉国产在线观看软件| 99在线视频精品| 91电影在线观看| 欧美日韩一区二区三区免费看| 在线观看亚洲a| 欧美精品v国产精品v日韩精品| 欧美肥妇bbw| 日韩午夜激情电影| 久久综合久久综合九色| 久久精品人人做人人综合| 国产日产欧美精品一区二区三区| 国产人成亚洲第一网站在线播放 | 欧美成人一区二区| 国产午夜精品久久久久久免费视 | 亚洲色大成网站www久久九九| 亚洲欧洲日韩女同| 亚洲激情av在线| 日韩不卡一区二区三区 | 精品一区二区三区影院在线午夜| 日本v片在线高清不卡在线观看| 久久国产三级精品| 国产99久久久国产精品| 色综合久久99| 91精品综合久久久久久| 久久精品日韩一区二区三区| 亚洲视频狠狠干| 日韩精品成人一区二区三区| 国产激情精品久久久第一区二区 | 日韩区在线观看| 国产三级欧美三级日产三级99| 自拍偷拍国产精品| 日本成人在线不卡视频| 在线播放一区二区三区| 日韩精品一区二区三区视频播放 | 99精品视频在线免费观看| 91久久精品一区二区三区| 欧美精品一卡两卡| 久久人人超碰精品| 一二三区精品视频| 激情综合色播激情啊| 97久久精品人人澡人人爽| 欧美军同video69gay| 亚洲国产成人一区二区三区| 亚洲福利国产精品| 国产美女精品在线| 欧美日韩黄视频| 国产欧美日韩在线| 青青草精品视频| 色综合久久中文字幕| 久久综合国产精品| 天堂蜜桃一区二区三区| 成人免费高清在线| 日韩欧美高清一区| 亚洲夂夂婷婷色拍ww47| 岛国一区二区在线观看| 欧美美女网站色| 亚洲欧洲中文日韩久久av乱码| 六月丁香婷婷久久| 欧美日韩久久久久久| 国产精品热久久久久夜色精品三区| 丝袜美腿高跟呻吟高潮一区| 99视频精品在线| 久久久亚洲欧洲日产国码αv| 亚洲大片在线观看| 92精品国产成人观看免费| 精品国内二区三区| 日韩在线一区二区三区| 日本久久电影网| 国产精品热久久久久夜色精品三区| 美女精品一区二区| 欧美日韩视频一区二区| 国产精品久久久久久久久果冻传媒| 美女精品自拍一二三四| 欧美精品aⅴ在线视频| 一区二区成人在线观看| 99精品国产99久久久久久白柏| 欧美tickling挠脚心丨vk| 午夜视频在线观看一区二区三区| 99久久精品免费观看| 久久久久久一二三区| 久久国产尿小便嘘嘘| 日韩久久久精品| 久久不见久久见中文字幕免费| 3d动漫精品啪啪1区2区免费 | 国产91在线观看丝袜| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩国产一二三区| 5月丁香婷婷综合| 午夜视频久久久久久| 在线这里只有精品| 亚洲高清视频的网址| 欧美日韩亚洲综合一区| 亚洲成人av福利| 欧美美女一区二区| 日本va欧美va精品发布| 日韩美一区二区三区| 国模套图日韩精品一区二区 | 一道本成人在线| 亚洲美女屁股眼交| 色国产精品一区在线观看| 亚洲另类中文字| 欧美亚州韩日在线看免费版国语版| 樱花影视一区二区| 欧美日韩激情一区二区| 青青草伊人久久| 久久久精品国产免费观看同学| 国产精品亚洲一区二区三区妖精| 国产亚洲欧美日韩日本| 成人在线视频一区二区| 中文字幕日本不卡| 欧美伊人精品成人久久综合97| 午夜精品一区二区三区免费视频 | 国产成人三级在线观看| 国产精品你懂的| 色域天天综合网| 天天综合色天天| 精品成人在线观看| 91最新地址在线播放| 依依成人综合视频| 欧美日韩国产综合视频在线观看| 日本女优在线视频一区二区| 精品久久久久久久久久久久包黑料| 福利一区在线观看| 亚洲老妇xxxxxx| 91麻豆精品久久久久蜜臀 | 91在线精品一区二区| 亚洲国产精品久久不卡毛片| 精品久久久久久最新网址| eeuss鲁片一区二区三区在线观看| 一区二区三区在线免费视频| 欧美视频中文一区二区三区在线观看| 午夜久久福利影院| 欧美经典一区二区| 欧美视频一区二区三区在线观看| 日本中文在线一区| 国产精品午夜春色av| 欧美色网一区二区| 国产一区日韩二区欧美三区| 亚洲精品菠萝久久久久久久| 欧美一区二区三区日韩| 成人精品免费看| 天天av天天翘天天综合网色鬼国产| 精品国产乱码久久久久久牛牛| 成人国产在线观看| 日本午夜精品一区二区三区电影 | 色婷婷香蕉在线一区二区| 另类小说视频一区二区| 中文字幕免费在线观看视频一区| 在线精品观看国产| 大桥未久av一区二区三区中文| 午夜精品一区二区三区免费视频| 国产精品污网站| 91麻豆精品国产91久久久久久| 国产福利一区二区三区视频| 日韩精品1区2区3区| 亚洲欧美国产77777| 久久精品亚洲麻豆av一区二区 | 久久久国际精品|