锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Scanner;
/**
*
*<br>
* 鏈嶅姟鍣ㄧ殑瀹炵幇鏁堟灉錛?<br>
*<br>
* 1.杈撳叆-help寰楀埌鎵鏈夋湁鍏蟲湇鍔″櫒鎿嶄綔鐨勫懡浠?<br>
*<br>
* 2.杈撳叆-run榪涘叆鏈嶅姟鍣ㄥ悇欏瑰唴瀹瑰垵濮嬪寲 <br>
*<br>
* 3.杈撳叆-stop鏂紑鏈嶅姟鍣?<br>
*<br>
* 4.杈撳叆-quit鏂紑鏈嶅姟鍣紝騫墮鍑烘搷浣?<br>
*<br>
* 5.鏈嶅姟鍣ㄥ垱寤烘垚鍔熷悗錛屼細(xì)閫氳繃鍗曠嫭鐨勭嚎紼嬭繍琛岀洃鍚鎴風(fēng)淇℃伅(listenLink) <br>
*<br>
* 6.鏈嶅姟鍣ㄦ帴鏀跺埌鏁版嵁鍚庯紝浼?xì)灏嗘暟鎹U諱氦鑷蟲暟鎹垎鏋愬櫒(analyseMes)澶勭悊 <br>
*<br>
* 7.褰撶敤鎴風(fēng)‘瀹氳繛鎺ュ茍紜畾鏄電О鍚庯紝鏈嶅姟鍣ㄥ皢璇ョ敤鎴風(fēng)殑鍦板潃鍙?qiáng)濮撳悕瀛樺偍鍦╥nfoMemory涓?<br>
*<br>
*<br>
*<br>
*<br>
* 鏈嶅姟鍣ㄧ殑綾諱笌鏂規(guī)硶錛?<br>
*<br>
* 1.嫻嬭瘯鏈嶅姟鍣ㄥ垱寤猴細(xì)testServer(String ip,int port) <br>
*<br>
* 2.鍒濆鍖栨湇鍔″櫒 錛歩nitServer(String ip,int port) <br>
*<br>
* 3.紜畾IP涓嶱ort 錛歠ixServerLink(String ip,int port) <br>
*<br>
* 4.淇℃伅鐩戝惉鍣?錛歭istenLink() <br>
*<br>
* 5.鏁版嵁鍒嗘瀽鍣?錛歛nalyseMes(String mes) <br>
*<br>
* 6.鑾峰彇鍦板潃鐢ㄦ埛鍚嶏細(xì)getConsumerName(SocketAddress sa) <br>
*<br>
* 7.鏁版嵁杞彂鍣?錛歵ransforMes(String mes) <br>
*<br>
* 8.鏁版嵁鍗曢」杞彂鍣細(xì)transforMesSingle(SocketAddress adr,String mes) <br>
*<br>
* 9.鍋滄鏈嶅姟鍣?錛歝utServer() <br>
*<br>
* 10.鑾峰緱甯姪鍒楄〃 錛歨elpList() <br>
*<br>
* 11.閿欒鎻愮ず鏂規(guī)硶 錛歟rrorTip(String str) <br>
*<br>
* 12.鍦ㄤ富鍑芥暟涓繘琛岀浉搴旀搷浣?<br>
*<br>
*<br>
* 閲嶇偣娉ㄦ剰鐨勫湴鏂癸細(xì) <br>
*<br>
* 涓庡鎴風(fēng)鐩鎬豢錛屼負(fù)浜嗛『鍒╃洃鍚俊鎭紝闇瑕佸彟涓涓嚎紼嬭繍琛屼俊鎭洃鍚櫒
*
*/
public class ChatServer implements Runnable
{
private DatagramSocket server = null;
private DatagramPacket getDatas = null;
private InetAddress serverAddress = null;
private int port = 0;
// 寮濮嬭繍琛岀洃鍚殑鍙橀噺
private boolean beStart = false;
// 鐢ㄦ潵嫻嬭瘯鏈嶅姟鍣ㄧ殑鍙橀噺
private boolean test = true;
// 淇℃伅瀛樺偍鍣?br /> private Hashtable<String, SocketAddress> infoMemory = new Hashtable<String, SocketAddress>();
/**
* 嫻嬭瘯鏈嶅姟鍣ㄨ繛鎺?br /> *
* @param ip
* @param port
* @return
*/
public boolean testServer(String ip, int port)
{
this.initServer(ip, port);
return test;
}
/**
* 鏈嶅姟鍣ㄥ垵濮嬪寲
*
* @param ip
* @param port
*/
public void initServer(String ip, int port)
{
// 紜畾IP涓巔ort杈撳叆姝g‘
this.fixServerLink(ip, port);
try
{
server = new DatagramSocket(this.port, serverAddress);
System.out.println("!-The Server Initialization Success錛?);
// 鍙互寮濮嬭繍琛屽彉閲?br /> beStart = true;
}
catch (SocketException s)
{
// 濡傛灉鍑虹幇寮傚父錛屽垯鏈嶅姟鍣ㄦ祴璇曚笉閫氳繃
test = false;
errorTip("!-The Server Initialization Fail!");
}
finally
{
}
}
/**
* 紜畾鏈嶅姟鍣↖P鍜岀鍙d俊鎭?br /> *
* @param ip
* @param port
*/
private void fixServerLink(String ip, int port)
{
// 鍒ゆ柇榪炴帴鏈嶅姟鍣ㄧ殑绔彛鍙?br /> // 濡傛灉杈撳叆鍛戒護(hù)涓?錛屽垯涓洪粯璁ょ鍙e彿9999
// 鍚﹀垯绔彛鍙蜂負(fù)鏂扮鍙e彿
if (port == 0)
this.port = 9999;
else
this.port = port;
// 鍒ゆ柇榪炴帴鏈嶅姟鍣ㄧ殑IP鍦板潃
// 濡傛灉杈撳叆鍛戒護(hù)涓?錛屽垯涓洪粯璁ょ殑鏈湴IP鍦板潃
// 鍚﹀垯涓鴻緭鍏ョ殑IP鍦板潃
try
{
if (ip.equalsIgnoreCase("0"))
this.serverAddress = InetAddress.getLocalHost();
else
this.serverAddress = InetAddress.getByName(ip);
}
catch (UnknownHostException u)
{
errorTip("!-Sorry, IP address you put is not currect!");
}
}
/**
* 鐩戝惉淇℃伅
*
*/
public void listenLink()
{
byte[] buf = new byte[1024];
String mes = null;
try
{
getDatas = new DatagramPacket(buf, buf.length);
System.out.println("!-The Server starts listenning to message.");
while (beStart)
{
server.receive(getDatas);
mes = new String(buf, 0, getDatas.getLength());
// 灝嗚幏鍙栫殑鏁版嵁浼犻掕嚦鏁版嵁鍒嗘瀽鍣?br /> this.analyseMes(mes);
}
}
catch (IOException e)
{
errorTip("!-The Server Can not receive message");
}
}
/**
* 鏁版嵁鍒嗘瀽鍣紝緇欎簣鐩稿簲澶勭悊
*
* @param mes
*/
private void analyseMes(String mes)
{
// 鑾峰彇褰撳墠瀹㈡埛绔殑鍦板潃錛?br /> SocketAddress adr = getDatas.getSocketAddress();
// -test:榪涜鏈嶅姟鍣ㄤ笌瀹㈡埛绔殑榪炴帴嫻嬭瘯
// 鑻ユ垚鍔燂紝鍒欏皢璇ュ鎴風(fēng)鍙戦佹垚鍔熸秷鎭?br /> if (mes.trim().equalsIgnoreCase("-test"))
{
transforMesSingle(adr, "-test: !-From Server:Succeed in Testing.");
}
// -quit錛氭帴鍙楀鎴風(fēng)閫鍑轟俊鎭?br /> // 灝嗚鐢ㄦ埛鐨勯鍑轟俊鎭漿鍙戣嚦鎵鏈夊湪綰挎垚鍛?br /> else if (mes.trim().equalsIgnoreCase("-quit"))
{
String name = this.getConsumerName(adr);
System.out.println(name + "http://" + adr + " quit! ");
transforMes("* " + name + "閫鍑鴻亰澶╁");
infoMemory.remove(name);
}
// -getList:鎺ュ彈瀹㈡埛绔幏鍙栧垪琛ㄧ殑璇鋒眰
// 灝嗘墍鏈夌敤鎴瘋繛鎺ヤ負(fù)瀛楃涓茬殑褰㈠紡錛屽錛?-getList,鐢ㄦ埛1,鐢ㄦ埛2...鐢ㄦ埛n"
else if (mes.trim().equals("-getList"))
{
StringBuffer list = new StringBuffer();
list.append("-getList,");
Enumeration<String> names = infoMemory.keys();
while (names.hasMoreElements())
{
list.append(names.nextElement() + ",");
}
transforMesSingle(getDatas.getSocketAddress(), list.toString());
}
// -to錛氭帴鍙楀鎴風(fēng)璇鋒眰錛屽皢淇℃伅杞彂緇欑浉搴斿鎴?br /> // 濡傛灉鐩爣瀹㈡埛涓嶅瓨鍦紝鍒欏悜璇鋒眰瀹㈡埛鍙戦佺浉搴旀秷鎭?br /> else if (mes.indexOf("-to ") != -1 && mes.startsWith("-to "))
{
String main = mes.substring("-to ".length(), mes.length());
String toName = main.substring(0, main.indexOf(" "));
String name = this.getConsumerName(adr);
String con = name + " say to you :" + main.substring(toName.length() + 1, main.length());
if (!infoMemory.containsKey(toName))
transforMesSingle(adr, "!-The message can not be recevie by whom you send for,please check out.");
else
transforMesSingle(infoMemory.get(toName), con);
}
// -nick:鎺ュ彈瀹㈡埛绔櫥褰曡姹?br /> // 濡傛灉杈撳叆鐨勫尶鍚嶄笉瀛樺湪錛屽垯鐧昏璇ョ敤鎴蜂笌infoMemory
// 濡傛灉瀛樺湪鍒欒繑鍥炵浉搴旀彁紺?br /> else if (mes.indexOf("-nick ") != -1 && mes.startsWith("-nick "))
{
String nickName = mes.substring("-nick ".length(), mes.length());
if (infoMemory.containsKey(nickName))
transforMesSingle(adr, "-nick: !-The nickname you post is already exist,please try others.");
else
{
infoMemory.put(nickName, adr);
transforMes("Welcome " + nickName + " to Sunspot Chat!");
System.out.println(nickName + "http://" + adr.toString() + " succeed in lanuching.");
}
}
// 涓鑸秷鎭皢浼?xì)铦{鍙戣嚦鎵鏈夌敤鎴?br /> else
{
String name = this.getConsumerName(adr);
transforMes(name + ": " + mes);
}
}
/**
* 閫氳繃鍦板潃寰楀埌鐢ㄦ埛鐨勬樀縐?鐢變簬Hashtable鏃犳硶閫氳繃Value鑾峰彇Key錛屾墍鏈変笓闂ㄥ啓璇ユ柟娉?br /> *
* @param sa
* @return
*/
private String getConsumerName(SocketAddress sa)
{
Enumeration<String> names = infoMemory.keys();
String name = null;
while (names.hasMoreElements())
{
String temp = names.nextElement();
SocketAddress adrs = infoMemory.get(temp);
// 榪涜姣旇緝
if (sa.equals(adrs))
{
name = temp;
break;
}
}
return name;
}
/**
* 鍚戞墍鏈夌殑鐢ㄦ埛鍙戦佹暟鎹?br /> *
* @param mes
*/
public void transforMes(String mes)
{
byte[] buf = mes.getBytes();
DatagramPacket sendDatas = null;
Enumeration<SocketAddress> all = infoMemory.elements();
try
{
while (all.hasMoreElements())
{
sendDatas = new DatagramPacket(buf, buf.length, all.nextElement());
server.send(sendDatas);
}
}
catch (SocketException s)
{
errorTip("!-The feedback address is error!");
}
catch (IOException i)
{
errorTip("!-Can not send message!");
}
}
/**
* 鍚戝崟涓敤鎴峰彂閫佹暟鎹?br /> *
* @param adr
* @param mes
*/
public void transforMesSingle(SocketAddress adr, String mes)
{
byte[] buf = mes.getBytes();
try
{
DatagramPacket sendDatas = new DatagramPacket(buf, buf.length, adr);
server.send(sendDatas);
}
catch (SocketException s)
{
errorTip("!-The feedback address is error!");
}
catch (IOException i)
{
errorTip("!-Can not send message!");
}
}
/**
* 鏂紑榪炴帴
*
*/
public void cutServer()
{
beStart = false;
if (server != null)
server.close();
System.out.println("!-The server is done.");
}
public void helpList()
{
System.out.println("-help" + " 鑾峰彇鏈嶅姟鍣ㄧ浉搴旀搷浣滅殑甯姪" + "\n" + "-run " + " 榪愯鏈嶅姟鍣紝騫跺悓鏃跺緩绔嬩俊鎭洃鍚? + "\n" + "-stop"
+ " 鍋滄鏈嶅姟鍣? + "\n" + "-quit" + " 鍋滄鏈嶅姟鍣紝騫墮鍑哄懡浠? + "\n");
}
/**
* 綰跨▼
*/
public void run()
{
listenLink();
}
/**
* 涓昏鎿嶄綔
*
* @param args
*/
public static void main(String[] args)
{
ChatServer ser = new ChatServer();
String getIp = null;
int getPort = 0;
// 寤虹珛杈撳叆
Scanner input = new Scanner(System.in);
System.out.println("!-Please input server command:");
// 寮濮嬭緭鍏?br /> String command = null;
// 濡傛灉杈撳叆quit灝嗘柇寮榪炴帴錛屽茍閫鍑烘搷浣?br /> while (!(command = input.next()).equalsIgnoreCase("-quit"))
{
// 鑾峰彇甯姪
if (command.equalsIgnoreCase("-help"))
{
ser.helpList();
}
// 鍒濆鍖栨湇鍔″櫒
if (command.equalsIgnoreCase("-run"))
{
boolean goon = true;
while (goon)
{
System.out.println("1.杈撳叆鏈嶅姟鍣ㄧ殑IP鍦板潃錛岄粯璁よ緭鍏ユ暟瀛?錛?);
getIp = input.next();
System.out.println("2.杈撳叆鏈嶅姟鍣ㄧ殑绔彛鍙鳳紝榛樿杈撳叆鏁板瓧0錛?);
try
{
getPort = input.nextInt();
}
catch (Exception e)
{
System.out.println("!-The port style is not currect!");
}
// 嫻嬭瘯鏈嶅姟鍣ㄥ垱寤猴紝濡傛灉鎴愬姛鍒欏悓鏃朵負(fù)淇℃伅鐩戝惉鍣ㄥ緩绔嬬嚎紼?br /> System.out.println("!-鍒涘緩鏈嶅姟鍣ㄥ茍榪愯...");
if (ser.testServer(getIp, getPort))
{
new Thread(ser).start();
goon = false;
}
else
System.out.println("!-鏈嶅姟鍣ㄥ垱寤哄け璐ワ紝璇鋒鏌ワ紒");
}
}
// 鍏抽棴鏈嶅姟鍣?br /> if (command.equalsIgnoreCase("-stop"))
{
ser.cutServer();
}
}
input.close();
ser.cutServer();
}
/**
* 閿欒鎻愮ず
*
* @param str
*/
public static void errorTip(String str)
{
System.out.println("-----------------\n" + str + "\n-----------------");
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.Scanner;
/**
*
*<br>
* 瀹㈡埛绔殑瀹炵幇鏁堟灉 <br>
*<br>
* 1.鐧誨綍鏈嶅姟鍣紝濡傛灉鏈嶅姟鍣ㄧ鍙e彿鍜孖P鍙瘋緭鍏ョ殑瀛楃閮芥槸"0"鍒欙紝瀹㈡埛绔繛鎺ュ埌榛樿鐨勬湇鍔″櫒 <br>
*<br>
* 2.杈撳叆鑱婂ぉ鏄電О <br>
*<br>
* 3.杈撳叆"-quit"浼?xì)鑷姩閫鍑鴻亰澶?<br>
*<br>
* 4.杈撳叆"-getList"浼?xì)寰楀埌鍦ňU跨敤鎴風(fēng)殑鍚嶇О <br>
*<br>
* 5.杈撳叆"-to <鐢ㄦ埛鍚嶇О> <鑱婂ぉ淇℃伅>"浼?xì)鎶婁俊鎭彂閫佸埌鎸囧畾鐨勭敤鎴峰錛屼粬浜虹湅涓嶅埌 <br>
*<br>
* 6.杈撳叆"-help"浼?xì)寰楀埌瀹㈡堬L(fēng)鐩稿簲鎿嶄綔甯姪 <br>
*<br>
* 6.鐩存帴杈撳叆鍐呭鍒欎細(xì)灝嗗唴瀹瑰彂閫佸埌鎵鏈夊湪綰跨殑鐢ㄦ埛澶?<br>
*<br>
*<br>
*<br>
*<br>
* 瀹㈡埛绔殑綾諱笌鏂規(guī)硶 <br>
*<br>
* 1.寤虹珛榪炴帴鏂規(guī)硶錛歝onnectServer(String ip,int port) <br>
*<br>
* 2.鏂紑榪炴帴鏂規(guī)硶錛歞isconnectServer() <br>
*<br>
* 2.鍙戦佹秷鎭柟娉曪細(xì)sendMes(String mes) <br>
*<br>
* 3.鎺ュ彈娑堟伅鏂規(guī)硶錛歡etMes() <br>
*<br>
* 4.鎺ュ彈涓嬈℃秷鎭細(xì)getMesOnce() <br>
*<br>
* 5.鑾峰緱鐢ㄦ埛鍒楄〃錛歡etList(String mes) <br>
*<br>
* 6.嫻嬭瘯榪炴帴鏂規(guī)硶錛歵estConnect(String ip,int port) <br>
*<br>
* 7.媯(gè)鏌ョ敤鎴峰悕 錛歝heckNickName(String nickName) <br>
*<br>
* 8.鑾峰緱甯姪鍒楄〃錛歨elpList()錛?<br>
*<br>
* 9.鍚勯」鍐呭鐨勮緭鍏ュ湪main鏂規(guī)硶涓繘琛?<br>
*<br>
*<br>
*<br>
*<br>
* 閲嶇偣娉ㄦ剰鐨勫湴鏂?<br>
*<br>
* 鐢變簬瀹㈡埛绔棤娉曠煡閬撴湇鍔″櫒浣曟椂杞彂鏁版嵁錛屾墍浠ュ鎴風(fēng)闇瑕佷竴鐩翠笉鍋滃湴鐩戝惉娑堟伅錛屼負(fù)浜嗕笉褰卞搷鍏朵粬鐨勬柟娉曪紝濡傚彂閫佹暟鎹紝榪欓噷鐢ㄥ埌澶氱嚎紼嬶紝鍗充負(fù)鎺ュ彈鏁版嵁鍗曠嫭寤虹珛涓涓嚎紼嬶紝浠ラ槻姝㈠獎(jiǎng)鍝嶅叾浠栨柟娉曠殑姝e父宸ヤ綔銆?br /> *
*/
public class ChatClient implements Runnable
{
// 鍙戦佹暟鎹殑鏈嶅姟鍣∟et鍦板潃錛屽湪fixServerLink
// 鍜宻endMes鏂規(guī)硶涓細(xì)鐢ㄥ埌
private InetAddress sendAddress = null;
private int port = 0;
// 瀹㈡埛绔?br /> private DatagramSocket client = null;
// 鍙戦佺殑鏁版嵁鎶?br /> private DatagramPacket sendDatas = null;
// 鐢ㄦ潵嫻嬭瘯鏄惁鑳藉榪炴帴鎴愬姛鎴栬呯敤鎴峰悕鏄惁姝g‘
// 鍦╰estConnect鍜宑heckNickName涓細(xì)鐢ㄥ埌.
// 騫剁┛鎻掑湪sendMes鏂規(guī)硶涓?br /> private boolean test = true;
/**
* 寤虹珛榪炴帴
*
* @param ip 鏈嶅姟鍣↖P鍙?br /> * @param port 鏈嶅姟鍣≒ort
*/
public void connectServer(String ip, int port)
{
// 鍏堢‘瀹氳緭鍏ョ殑IP涓庣鍙e彿鏄惁絎﹀悎瑙勫垯
this.fixServerLink(ip, port);
try
{
client = new DatagramSocket();
}
catch (SocketException s)
{
System.out.println("The Connection of server is error.");
}
}
/**
* 紜畾IP涓嶱ort杈撳叆鏄惁姝g‘
*
* @param ip
* @param port
*/
private void fixServerLink(String ip, int port)
{
// 鍒ゆ柇榪炴帴鏈嶅姟鍣ㄧ殑绔彛鍙?br /> // 濡傛灉杈撳叆鍛戒護(hù)涓?錛屽垯涓洪粯璁ょ鍙e彿9999
// 鍚﹀垯绔彛鍙蜂負(fù)鏂扮鍙e彿
if (port == 0)
this.port = 9999;
else
this.port = port;
// 鍒ゆ柇榪炴帴鏈嶅姟鍣ㄧ殑IP鍦板潃
// 濡傛灉杈撳叆鍛戒護(hù)涓?錛屽垯涓洪粯璁ょ殑鏈湴IP鍦板潃
// 鍚﹀垯涓鴻緭鍏ョ殑IP鍦板潃
try
{
if (ip.equalsIgnoreCase("0"))
this.sendAddress = InetAddress.getLocalHost();
else
this.sendAddress = InetAddress.getByName(ip);
}
catch (UnknownHostException u)
{
System.out.println("Sorry, IP address you put is not currect!");
}
}
/**
* 鏂紑榪炴帴
*/
public void disconnectServer()
{
// 褰撳鎴風(fēng)鏂紑榪炴帴涔嬪墠錛屽鎴風(fēng)浼?xì)鍚戞湇鍔″櫒绔彂閫佷竴涓俊鎭紝
// 浠ヤ究鍛婅瘔鏈嶅姟鍣ㄨ瀹㈡埛涓嬬嚎
this.sendMes("-quit");
if (client != null)
client.close();
}
/**
* 鍙戦佹秷鎭?br /> *
* @param mes
*/
public void sendMes(String mes)
{
byte[] buf = mes.getBytes();
sendDatas = new DatagramPacket(buf, buf.length, sendAddress, port);
// 褰撳緩绔嬪彂閫佹椂錛屾祴璇曟甯?br /> test = true;
try
{
client.send(sendDatas);
}
catch (NullPointerException n)
{
// 濡傛灉鏃犳硶寰楀埌瑕佸彂閫佺殑娑堟伅錛屾祴璇曠粓姝?br /> test = false;
System.out.println("The nullity of the address of connection");
}
catch (IOException s)
{
// 濡傛灉鏃犳硶鍙戦佹秷鎭嚦鏈嶅姟鍣紝嫻嬭瘯緇堟
test = false;
System.out.println("There is a problem to send message.");
}
finally
{
}
}
/**
* 寰楀埌鏁版嵁
*/
public void getMes()
{
byte[] buf = new byte[1024];
DatagramPacket getDatas = new DatagramPacket(buf, buf.length);
String mes = null;
try
{
while (true)
{
client.receive(getDatas);
mes = new String(buf, 0, getDatas.getLength());
// 濡傛灉鏈嶅姟鍣ㄥ彂閫佺殑娑堟伅涓殑澶寸墖孌墊湁-getList
// 琛ㄦ槑瀹㈡埛绔幏寰楀湪綰跨敤鎴峰垪琛紝璋冪敤getList鏂規(guī)硶瑙f瀽
if (mes.indexOf("-getList") == 0)
this.getList(mes);
else
System.out.println(mes);
}
}
catch (IOException i)
{
System.out.println("Fail in receving message");
}
}
/**
* 寰楀埌涓嬈℃暟鎹?br /> *
*/
public String getMesOnce()
{
byte[] buf = new byte[1024];
DatagramPacket getDatas = new DatagramPacket(buf, buf.length);
String mes = null;
try
{
client.receive(getDatas);
mes = new String(buf, 0, getDatas.getLength());
}
catch (Exception e)
{
System.out.println("!-Can not receive the message!");
}
finally
{
}
return mes;
}
/**
* 鏄劇ず鍦ㄧ嚎鐢ㄦ埛鍒楄〃
*
* @param mes
*/
private void getList(String mes)
{
String[] list = mes.split(",");
System.out.println("鍦ㄧ嚎鐢ㄦ埛錛歕n-------------");
for (int i = 1; i < list.length; i++)
{
System.out.println(" * " + list[i]);
}
System.out.println("-------------");
}
/**
* 嫻嬭瘯榪炴帴
*
* @param ip
* @param port
* @return
*/
public boolean testConnect(String ip, int port)
{
// 鍒涘緩榪炴帴錛屾祴璇曡繛鎺ユ槸鍚︽紜?br /> this.connectServer(ip, port);
// 濡傛灉榪炴帴姝g‘錛岃瘯鍥懼彂閫佹祴璇曟爣璇?-test"
// 鍦ㄥ彂閫佹暟鎹繃紼嬩腑嫻嬭瘯榪炴帴鏄惁姝g‘
this.sendMes("-test");
// 濡傛灉榪炴帴鍙戦佹祴璇曢氳繃
// 鍒欏紑濮嬫祴璇曟槸鍚﹁兘澶熸紜?br /> if (test)
{
String mes = this.getMesOnce();
// 濡傛灉鏈嶅姟鍣ㄨ繑鍥炵浉搴旂殑鏍囪瘑錛屾祴璇曢氳繃
if (mes.startsWith("-test"))
{
test = true;
}
}
if (client != null)
{
client.close();
}
return test;
}
/**
* 鍒ゆ柇鐢ㄦ埛鍚嶈緭鍏ユ槸鍚︽紜?br /> */
private boolean checkNickName(String nickName)
{
test = true;
String mes = null;
// 鍒ゆ柇鏄電О鏄惁絎﹀悎綰﹀畾
for (int i = 0; i < nickName.length(); i++)
{
char temp = nickName.charAt(i);
// 濡傛灉涓嶇鍚堬紝鍒欑粓姝㈡祴璇?br /> if (!Character.isLetterOrDigit(temp))
{
test = false;
break;
}
}
// 濡傛灉閫氳繃綰﹀畾錛屽垯璇曞浘鍚戞湇鍔″櫒鍙戦佹樀縐幫紝榪涜鍒ゆ柇
if (test)
{
this.sendMes("-nick " + nickName);
mes = this.getMesOnce();
// 濡傛灉鏈嶅姟鍣ㄨ繑鍥?-nick"鏍囪瘑
// 璇存槑嫻嬭瘯鏄電О澶辮觸錛岀粓姝㈡祴璇?br /> if (mes.startsWith("-nick"))
{
test = false;
}
}
System.out.println(mes);
return test;
}
/**
* 寰楀埌甯姪鍒楄〃
*
*/
public void helpList()
{
System.out.println("閲嶈璇存槑錛氬鏋滃凡緇忔垚鍔熻繛鎺ワ紝鍙杈撳叆鍐呭錛屾墍鏈夊湪綰跨敤鎴烽兘鑳界湅鍒版?zhèn)ㄧ殑鍙懎a銆? + "\n" + "-help" + " 鑾峰彇瀹㈡埛绔浉搴旀搷浣滅殑甯姪" + "\n"
+ "-test" + " 嫻嬭瘯涓庢湇鍔″櫒鐨勮繛鎺ワ紝濡傛灉宸茬粡鏈嶅姟鍣ㄨ繛鎺ワ紝璇蜂笉瑕侀夌敤姝ら」" + "\n" + "-getList" + " 寰楀埌鍦ㄧ嚎鐢ㄦ埛鐨勫垪琛? + "\n"
+ "-to <name> <message>" + "\n" + " 灝嗘秷鎭彂閫佸埌鐗瑰畾鐨勫湪綰跨敤鎴峰" + "\n" + "-quit"
+ " 鏂紑榪炴帴錛岄鍑鴻亰澶╁" + "\n");
}
/**
* 綰跨▼閮ㄥ垎
*/
public void run()
{
getMes();
}
/**
* 鍚勯」鍐呭鐨勬搷浣滃櫒
*/
public static void main(String[] args)
{
ChatClient consumer = new ChatClient();
String getIp = null;
int getPort = 0;
System.out.println("嬈㈣繋鐧誨綍Sunspot鑱婂ぉ瀹わ紒");
Scanner input = new Scanner(System.in);
// 杈撳叆IP涓嶱ort
boolean goahead = true;
while (goahead)
{
System.out.println("1.璇瘋緭鍏ユ湇鍔″櫒IP鍦板潃錛岄粯璁よ杈撳叆鏁板瓧0 錛?);
// 絎竴姝ワ細(xì)杈撳叆鏈嶅姟鍣ㄧ殑IP鍦板潃
getIp = input.next();
// 絎簩姝ワ細(xì)杈撳叆鏈嶅姟鍣ㄧ殑绔彛鍙?br /> System.out.println("2.璇瘋緭鍏ユ湇鍔″櫒绔彛鍙鳳紝榛樿璇瘋緭鍏ユ暟瀛? 錛?);
try
{
getPort = input.nextInt();
}
catch (InputMismatchException i)
{
errorTip("!-The port style is not currect!");
}
catch (NoSuchElementException n)
{
errorTip("!-The port style is not currect!");
}
// 嫻嬭瘯鏈嶅姟鍣?br /> System.out.println("!-姝e湪嫻嬭瘯榪炴帴鏈嶅姟鍣紝璇風(fēng)◢鍊?..");
if (consumer.testConnect(getIp, getPort))
{
System.out.println("!-榪炴帴鎴愬姛錛?);
goahead = false;
}
else
System.out.println("!-榪炴帴澶辮觸錛屾?zhèn)ㄨ緭鍏ョ殑IP鍙?qiáng)绔彛鍙烽敊璇?);
}
// 榪炴帴鏈嶅姟鍣?br /> consumer.connectServer(getIp, getPort);
// 杈撳叆鏄電О
boolean goon = true;
while (goon)
{
// 絎笁姝ワ細(xì)杈撳叆鏄電О
System.out.println("3.璇瘋緭鍏ユ?zhèn)ㄧ櫿d綍鍚庢樉紺虹殑鏄電О(鍙兘杈撳叆涓枃銆佽嫳鏂囧瓧姣嶅強(qiáng)鏁板瓧)錛?);
String nick = input.next();
boolean judge = consumer.checkNickName(nick);
// 鍒ゆ柇鏄電О鏄惁杈撳叆姝g‘
if (judge)
goon = false;
else
System.out.println("!-鎮(zhèn)ㄨ緭鍏ョ殑鐢ㄦ埛鍚嶄笉絎﹀悎鏉′歡錛岃閲嶆柊杈撳叆錛?);
}
// 寮濮嬭繍琛屾帴鏀舵暟鎹?br /> new Thread(consumer).start();
// 鑱婂ぉ
String mes = null;
System.out.println("!-鎮(zhèn)ㄦ垚鍔熻繘鍏ヨ亰澶╁錛?);
while (!(mes = input.nextLine()).equalsIgnoreCase("-quit"))
{
// 濡傛灉杈撳叆"-test"鍛戒護(hù)錛屽紑濮嬫祴璇?br /> if (mes.trim().equalsIgnoreCase("-test"))
{
consumer.testConnect(getIp, getPort);
// -getList錛氳幏寰楀湪綰跨敤鎴峰垪琛?br /> }
else if (mes.trim().equalsIgnoreCase("-getList"))
{
consumer.sendMes(mes);
// -nick 璁劇疆鏄電О
}
else if (mes.startsWith("-nick "))
{
System.out.println("!-You have named, Can not allowed to rename!");
// -help 鑾峰緱甯姪鍒楄〃
}
else if (mes.equalsIgnoreCase("-help"))
{
consumer.helpList();
// 濡傛灉杈撳叆鐨勬槸絀哄瓧絎︼紝鍒欎笉鍙戦?br /> }
else if (mes.equals(""))
{
}
else
{
consumer.sendMes(mes);
}
}
// 閫鍑?br /> input.close();
consumer.disconnectServer();
}
/**
* 閿欒鎻愮ず鏍囪
*
* @param str
*/
public static void errorTip(String str)
{
System.out.println("-----------------\n" + str + "\n-----------------");
}
}
set APP_DIR=D:\tools\tomcat6.0\wtpwebapps\com.tianhe.jxc
set APP_LIB_PATH=%APP_DIR%\WEB-INF\lib
set APP_CLASS_PATH=%APP_DIR%\WEB-INF\classes
java -Djava.ext.dirs=%APP_LIB_PATH% -cp %APP_CLASS_PATH%;. com.tianhe.frm.http.server.SimpleHttpServer -port 8080 -charset gbk
rem sc.bat
set APP_DIR=D:\tools\tomcat6.0\wtpwebapps\com.tianhe.jxc
set APP_LIB_PATH=%APP_DIR%\WEB-INF\lib
set APP_CLASS_PATH=%APP_DIR%\WEB-INF\classes
java -Djava.ext.dirs=%APP_LIB_PATH% -classpath -cp %APP_CLASS_PATH%;. com.tianhe.frm.http.client.SimpleHttpClient -url http://www.tkk7.com/Images/adminlogo.gif -dir d:/wallpaper