ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品电影久久久,国产精品久久久乱弄,波多野结衣中文字幕在线http://www.aygfsteel.com/tiandizhijian/category/48432.htmlä¸è¦å› äØ“(f¨´)风雨飘落ž®±åœæ­¢äº†(ji¨£n)你的脚步åQŒçœŸæ­£çš„得失ž®±åœ¨ä½ çš„å¿?j¨©)中ã€?/description>zh-cnTue, 10 Dec 2013 19:56:15 GMTTue, 10 Dec 2013 19:56:15 GMT60ChatServerhttp://www.aygfsteel.com/tiandizhijian/articles/407375.html¿U‹å¤©çš„å±±è°?/dc:creator>¿U‹å¤©çš„å±±è°?/author>Mon, 09 Dec 2013 14:04:00 GMThttp://www.aygfsteel.com/tiandizhijian/articles/407375.htmlhttp://www.aygfsteel.com/tiandizhijian/comments/407375.htmlhttp://www.aygfsteel.com/tiandizhijian/articles/407375.html#Feedback0http://www.aygfsteel.com/tiandizhijian/comments/commentRss/407375.htmlhttp://www.aygfsteel.com/tiandizhijian/services/trackbacks/407375.htmlpackage com.tianhe.frm.chat;

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>
 * 服务器的实现效果åQ?<br>
 *<br>
 * 1.输入-help得到所有有å…ÏxœåŠ¡å™¨æ“ä½œçš„å‘½ä»?<br>
 *<br>
 * 2.输入-run˜q›å…¥æœåС噍各™å¹å†…容初始化 <br>
 *<br>
 * 3.输入-stop断开服务å™?<br>
 *<br>
 * 4.输入-quit断开服务器,òq‰™€€å‡ºæ“ä½?<br>
 *<br>
 * 5.服务器创建成功后åQŒä¼š(x¨¬)通过单独的线½E‹è¿è¡Œç›‘听客æˆïL(f¨¥ng)«¯ä¿¡æ¯(listenLink) <br>
 *<br>
 * 6.服务器接收到数据后,ä¼?x¨¬)将数据¿UÖMº¤è‡Ïx•°æ®åˆ†æžå™¨(analyseMes)处理 <br>
 *<br>
 * 7.当用æˆïL(f¨¥ng)¡®å®šè¿žæŽ¥åƈ¼‹®å®šæ˜ëЧ°åŽï¼ŒæœåŠ¡å™¨å°†è¯¥ç”¨æˆïL(f¨¥ng)š„地址å?qi¨¢ng)姓名存储在infoMemory中ã€?<br>
 *<br>
 *<br>
 *<br>
 *<br>
 * 服务器的¾cÖM¸Žæ–ÒŽ(gu¨©)³•åQ?<br>
 *<br>
 * 1.‹¹‹è¯•服务器创建:(x¨¬)testServer(String ip,int port) <br>
 *<br>
 * 2.初始化服务器 åQšinitServer(String ip,int port) <br>
 *<br>
 * 3.¼‹®å®šIP与Port åQšfixServerLink(String ip,int port) <br>
 *<br>
 * 4.信息监听å™?åQšlistenLink() <br>
 *<br>
 * 5.数据分析å™?åQšanalyseMes(String mes) <br>
 *<br>
 * 6.获取地址用户名:(x¨¬)getConsumerName(SocketAddress sa) <br>
 *<br>
 * 7.数据转发å™?åQštransforMes(String mes) <br>
 *<br>
 * 8.数据单项转发器:(x¨¬)transforMesSingle(SocketAddress adr,String mes) <br>
 *<br>
 * 9.停止服务å™?åQšcutServer() <br>
 *<br>
 * 10.获得帮助列表 åQšhelpList() <br>
 *<br>
 * 11.错误提示æ–ÒŽ(gu¨©)³• åQšerrorTip(String str) <br>
 *<br>
 * 12.在主函数中进行相应操ä½?<br>
 *<br>
 *<br>
 * 重点注意的地方:(x¨¬) <br>
 *<br>
 * 与客æˆïL(f¨¥ng)«¯ç›æ€»¿åQŒäØ“(f¨´)äº?ji¨£n)顺利监听信息,需要另一个线½E‹è¿è¡Œä¿¡æ¯ç›‘听器
 *
 */
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与port输入正确
        this.fixServerLink(ip, port);
        try
        {
            server = new DatagramSocket(this.port, serverAddress);
            System.out.println("!-The Server Initialization SuccessåQ?);
            // 可以开始运行变é‡?br />            beStart = true;
        }
        catch (SocketException s)
        {
            // 如果出现异常åQŒåˆ™æœåŠ¡å™¨æµ‹è¯•ä¸é€šè¿‡
            test = false;
            errorTip("!-The Server Initialization Fail!");
        }
        finally
        {
           
        }
    }
   
    /**
     * ¼‹®å®šæœåС噍IP和端口信æ?br />     *
     * @param ip
     * @param port
     */
    private void fixServerLink(String ip, int port)
    {
        // 判断˜qžæŽ¥æœåŠ¡å™¨çš„ç«¯å£å?br />        // 如果输入命ä×o(h¨´)ä¸?åQŒåˆ™ä¸ºé»˜è®¤ç«¯å£å·9999
        // å¦åˆ™ç«¯å£å·äØ“(f¨´)新端口号
        if (port == 0)
            this.port = 9999;
        else
            this.port = port;
        // 判断˜qžæŽ¥æœåŠ¡å™¨çš„IP地址
        // 如果输入命ä×o(h¨´)ä¸?åQŒåˆ™ä¸ºé»˜è®¤çš„æœ¬åœ°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");
        }
    }
   
    /**
     * 数据分析器,¾l™äºˆç›¸åº”处理
     *
     * @param mes
     */
    private void analyseMes(String mes)
    {
        // 获取当前客户端的地址åQ?br />        SocketAddress adr = getDatas.getSocketAddress();
       
        // -test:˜q›è¡ŒæœåŠ¡å™¨ä¸Žå®¢æˆ·ç«¯çš„˜qžæŽ¥‹¹‹è¯•
        // 若成功,则将该客æˆïL(f¨¥ng)«¯å‘送成功消æ?br />        if (mes.trim().equalsIgnoreCase("-test"))
        {
            transforMesSingle(adr, "-test: !-From Server:Succeed in Testing.");
        }
       
        // -quitåQšæŽ¥å—å®¢æˆïL(f¨¥ng)«¯é€€å‡ÞZ¿¡æ?br />        // ž®†è¯¥ç”¨æˆ·çš„退å‡ÞZ¿¡æ¯è{发至所有在¾U¿æˆå‘?br />        else if (mes.trim().equalsIgnoreCase("-quit"))
        {
            String name = this.getConsumerName(adr);
            System.out.println(name + "http://" + adr + " quit! ");
            transforMes("* " + name + "退å‡?gu¨®)™Šå¤©å®?);
            infoMemory.remove(name);
        }
       
        // -getList:接受客户端获取列表的è¯äh±‚
        // ž®†æ‰€æœ‰ç”¨æˆ¯‚¿žæŽ¥äØ“(f¨´)字符串的形式åQŒå¦‚åQ?-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åQšæŽ¥å—å®¢æˆïL(f¨¥ng)«¯è¯äh±‚åQŒå°†ä¿¡æ¯è½¬å‘¾l™ç›¸åº”客æˆ?br />        // 如果目标客户不存在,则向è¯äh±‚客户发送相应消æ?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 />        // 如果输入的匿名不存在åQŒåˆ™ç™»è®°è¯¥ç”¨æˆ·ä¸ŽinfoMemory
        // 如果存在则返回相应提½C?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);
        }
    }
   
    /**
     * 通过地址得到用户的昵¿U?ç”׃ºŽHashtable无法通过Value获取KeyåQŒæ‰€æœ‰ä¸“门写该方æ³?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);
            // ˜q›è¡Œæ¯”较
            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!");
        }
    }
   
    /**
     * æ–­å¼€˜qžæŽ¥
     *
     */
    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 " + "    ˜qè¡ŒæœåŠ¡å™¨ï¼Œòq¶åŒæ—¶å¾ç«‹ä¿¡æ¯ç›‘å? + "\n" + "-stop"
                + "    停止服务å™? + "\n" + "-quit" + "    停止服务器,òq‰™€€å‡ºå‘½ä»? + "\n");
    }
   
    /**
     * ¾U¿ç¨‹
     */
    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ž®†æ–­å¼€˜qžæŽ¥åQŒåƈ退出操ä½?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地址åQŒé»˜è®¤è¾“入数å­?åQ?);
                    getIp = input.next();
                    System.out.println("2.è¾“å…¥æœåŠ¡å™¨çš„ç«¯å£åøP¼Œé»˜è®¤è¾“入数字0åQ?);
                    try
                    {
                        getPort = input.nextInt();
                    }
                    catch (Exception e)
                    {
                        System.out.println("!-The port style is not currect!");
                    }
                    // ‹¹‹è¯•æœåŠ¡å™¨åˆ›å»ºï¼Œå¦‚æžœæˆåŠŸåˆ™åŒæ—¶äØ“(f¨´)信息监听器徏立线½E?br />                    System.out.println("!-åˆ›å¾æœåŠ¡å™¨åÆˆ˜qè¡Œ...");
                    if (ser.testServer(getIp, getPort))
                    {
                        new Thread(ser).start();
                        goon = false;
                    }
                    else
                        System.out.println("!-服务器创建失败,è¯äh£€æŸ¥ï¼");
                }
            }
           
            // 关闭服务å™?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-----------------");
    }
}



]]>
ChatClienthttp://www.aygfsteel.com/tiandizhijian/articles/407376.html¿U‹å¤©çš„å±±è°?/dc:creator>¿U‹å¤©çš„å±±è°?/author>Mon, 09 Dec 2013 14:04:00 GMThttp://www.aygfsteel.com/tiandizhijian/articles/407376.htmlhttp://www.aygfsteel.com/tiandizhijian/comments/407376.htmlhttp://www.aygfsteel.com/tiandizhijian/articles/407376.html#Feedback0http://www.aygfsteel.com/tiandizhijian/comments/commentRss/407376.htmlhttp://www.aygfsteel.com/tiandizhijian/services/trackbacks/407376.htmlpackage com.tianhe.frm.chat;

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.ç™Õd½•服务器,如果服务器端口号和IP可‚¾“入的字符都是"0"则,客户端连接到默认的服务器 <br>
 *<br>
 * 2.输入聊天æ˜ëЧ° <br>
 *<br>
 * 3.输入"-quit"ä¼?x¨¬)自动退å‡?gu¨®)™Šå?<br>
 *<br>
 * 4.输入"-getList"ä¼?x¨¬)得到在¾U¿ç”¨æˆïL(f¨¥ng)š„名称 <br>
 *<br>
 * 5.输入"-to <用户名称> <聊天信息>"ä¼?x¨¬)把信息发送到指定的用户处åQŒä»–人看不到 <br>
 *<br>
 * 6.输入"-help"ä¼?x¨¬)得到客æˆïL(f¨¥ng)«¯ç›¸åº”操作帮助 <br>
 *<br>
 * 6.直接输入内容则会(x¨¬)ž®†å†…容发送到所有在¾U¿çš„用户å¤?<br>
 *<br>
 *<br>
 *<br>
 *<br>
 * 客户端的¾cÖM¸Žæ–ÒŽ(gu¨©)³• <br>
 *<br>
 * 1.建立˜qžæŽ¥æ–ÒŽ(gu¨©)³•åQšconnectServer(String ip,int port) <br>
 *<br>
 * 2.æ–­å¼€˜qžæŽ¥æ–ÒŽ(gu¨©)³•åQšdisconnectServer() <br>
 *<br>
 * 2.发送消息方法:(x¨¬)sendMes(String mes) <br>
 *<br>
 * 3.接受消息æ–ÒŽ(gu¨©)³•åQšgetMes() <br>
 *<br>
 * 4.接受一‹Æ¡æ¶ˆæ¯ï¼š(x¨¬)getMesOnce() <br>
 *<br>
 * 5.获得用户列表åQšgetList(String mes) <br>
 *<br>
 * 6.‹¹‹è¯•˜qžæŽ¥æ–ÒŽ(gu¨©)³•åQštestConnect(String ip,int port) <br>
 *<br>
 * 7.‹‚€(g¨¨)查用户名 åQšcheckNickName(String nickName) <br>
 *<br>
 * 8.获得帮助列表åQšhelpList()åQ?<br>
 *<br>
 * 9.各项内容的输入在mainæ–ÒŽ(gu¨©)³•中进è¡?<br>
 *<br>
 *<br>
 *<br>
 *<br>
 * 重点注意的地æ–?<br>
 *<br>
 * ç”׃ºŽå®¢æˆ·ç«¯æ— æ³•知道服务器何时转发数据åQŒæ‰€ä»¥å®¢æˆïL(f¨¥ng)«¯éœ€è¦ä¸€ç›´ä¸åœåœ°ç›‘听消息åQŒäØ“(f¨´)äº?ji¨£n)不影响其他的方法,如发送数据,˜q™é‡Œç”¨åˆ°å¤šçº¿½E‹ï¼Œå³äØ“(f¨´)接受数据单独建立一个线½E‹ï¼Œä»¥é˜²æ­¢åª„(ji¨£ng)响其他方法的正常工作ã€?br /> *
 */
public class ChatClient implements Runnable
{
    // 发送数据的服务器Net地址åQŒåœ¨fixServerLink
    // å’ŒsendMesæ–ÒŽ(gu¨©)³•中会(x¨¬)用到
    private InetAddress sendAddress = null;
   
    private int port = 0;
   
    // 客户ç«?br />    private DatagramSocket client = null;
   
    // 发送的数据æŠ?br />    private DatagramPacket sendDatas = null;
   
    // 用来‹¹‹è¯•是否能够˜qžæŽ¥æˆåŠŸæˆ–è€…ç”¨æˆ·åæ˜¯å¦æ­£ç¡®
    // 在testConnectå’ŒcheckNickName中会(x¨¬)用到.
    // òq¶ç©¿æ’在sendMesæ–ÒŽ(gu¨©)³•ä¸?br />    private boolean test = true;
   
    /**
     * 建立˜qžæŽ¥
     *
     * @param ip 服务器IPå?br />     * @param port 服务器Port
     */
    public void connectServer(String ip, int port)
    {
        // 先确定输入的IP与端口号是否½W¦åˆè§„则
        this.fixServerLink(ip, port);
       
        try
        {
            client = new DatagramSocket();
        }
        catch (SocketException s)
        {
            System.out.println("The Connection of server is error.");
        }
    }
   
    /**
     * ¼‹®å®šIP与Port输入是否正确
     *
     * @param ip
     * @param port
     */
    private void fixServerLink(String ip, int port)
    {
        // 判断˜qžæŽ¥æœåŠ¡å™¨çš„ç«¯å£å?br />        // 如果输入命ä×o(h¨´)ä¸?åQŒåˆ™ä¸ºé»˜è®¤ç«¯å£å·9999
        // å¦åˆ™ç«¯å£å·äØ“(f¨´)新端口号
        if (port == 0)
            this.port = 9999;
        else
            this.port = port;
        // 判断˜qžæŽ¥æœåŠ¡å™¨çš„IP地址
        // 如果输入命ä×o(h¨´)ä¸?åQŒåˆ™ä¸ºé»˜è®¤çš„æœ¬åœ°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!");
        }
    }
   
    /**
     * æ–­å¼€˜qžæŽ¥
     */
    public void disconnectServer()
    {
        // 当客æˆïL(f¨¥ng)«¯æ–­å¼€˜qžæŽ¥ä¹‹å‰åQŒå®¢æˆïL(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);
        // 当徏立发送时åQŒæµ‹è¯•æ­£å¸?br />        test = true;
        try
        {
            client.send(sendDatas);
        }
        catch (NullPointerException n)
        {
            // 如果无法得到要发送的消息åQŒæµ‹è¯•终æ­?br />            test = false;
            System.out.println("The nullity of the address of connection");
        }
        catch (IOException s)
        {
            // 如果无法发送消息至服务器,‹¹‹è¯•¾lˆæ­¢
            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());
                // 如果服务器发送的消息中的头片ŒD‰|œ‰-getList
                // 表明客户端获得在¾U¿ç”¨æˆ·åˆ—表,调用getListæ–ÒŽ(gu¨©)³•解析
                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("在线用户åQš\n-------------");
        for (int i = 1; i < list.length; i++)
        {
            System.out.println("    * " + list[i]);
        }
        System.out.println("-------------");
    }
   
    /**
     * ‹¹‹è¯•˜qžæŽ¥
     *
     * @param ip
     * @param port
     * @return
     */
    public boolean testConnect(String ip, int port)
    {
        // 创徏˜qžæŽ¥åQŒæµ‹è¯•连接是否正¼‹?br />        this.connectServer(ip, port);
        // 如果˜qžæŽ¥æ­£ç¡®åQŒè¯•囑֏‘送测试标è¯?-test"
        // 在发送数据过½E‹ä¸­‹¹‹è¯•˜qžæŽ¥æ˜¯å¦æ­£ç¡®
        this.sendMes("-test");
        // 如果˜qžæŽ¥å‘送测试通过
        // 则开始测试是否能够正¼‹?br />        if (test)
        {
            String mes = this.getMesOnce();
            // 如果服务器返回相应的标识åQŒæµ‹è¯•通过
            if (mes.startsWith("-test"))
            {
                test = true;
            }
        }
       
        if (client != null)
        {
            client.close();
        }
        return test;
    }
   
    /**
     * 判断用户名输入是否正¼‹?br />     */
    private boolean checkNickName(String nickName)
    {
        test = true;
        String mes = null;
        // 判断æ˜ëЧ°æ˜¯å¦½W¦åˆ¾U¦å®š
        for (int i = 0; i < nickName.length(); i++)
        {
            char temp = nickName.charAt(i);
            // 如果不符合,则终止测è¯?br />            if (!Character.isLetterOrDigit(temp))
            {
                test = false;
                break;
            }
        }
        // 如果通过¾U¦å®šåQŒåˆ™è¯•图向服务器发送昵¿UŽÍ¼Œ˜q›è¡Œåˆ¤æ–­
        if (test)
        {
            this.sendMes("-nick " + nickName);
            mes = this.getMesOnce();
            // 如果服务器返å›?-nick"标识
            // 说明‹¹‹è¯•æ˜ëЧ°å¤ÞpÓ|åQŒç»ˆæ­¢æµ‹è¯?br />            if (mes.startsWith("-nick"))
            {
                test = false;
            }
        }
       
        System.out.println(mes);
        return test;
    }
   
    /**
     * 得到帮助列表
     *
     */
    public void helpList()
    {
        System.out.println("重要说明åQšå¦‚果已¾læˆåŠŸè¿žæŽ¥ï¼Œåªè¦è¾“å…¥å†…å®¹åQŒæ‰€æœ‰åœ¨¾U¿ç”¨æˆ·éƒ½èƒ½çœ‹åˆ°æ?zh¨¨n)¨çš„发­a€ã€? + "\n" + "-help" + "         获取客户端相应操作的帮助" + "\n"
                + "-test" + "         ‹¹‹è¯•与服务器的连接,如果已经服务器连接,请不要选用此项" + "\n" + "-getList" + "    得到在线用户的列è¡? + "\n"
                + "-to <name> <message>" + "\n" + "                    ž®†æ¶ˆæ¯å‘送到特定的在¾U¿ç”¨æˆ·å¤„" + "\n" + "-quit"
                + "         æ–­å¼€˜qžæŽ¥åQŒé€€å‡?gu¨®)™Šå¤©å®? + "\n");
    }
   
    /**
     * ¾U¿ç¨‹éƒ¨åˆ†
     */
    public void run()
    {
        getMes();
    }
   
    /**
     * 各项内容的操作器
     */
    public static void main(String[] args)
    {
        ChatClient consumer = new ChatClient();
        String getIp = null;
        int getPort = 0;
        System.out.println("‹Æ¢è¿Žç™Õd½•Sunspot聊天室!");
        Scanner input = new Scanner(System.in);
       
        // 输入IP与Port
        boolean goahead = true;
        while (goahead)
        {
            System.out.println("1.误‚¾“入服务器IP地址åQŒé»˜è®¤è¯·è¾“入数字0 åQ?);
            // ½W¬ä¸€æ­¥ï¼š(x¨¬)输入服务器的IP地址
            getIp = input.next();
            // ½W¬äºŒæ­¥ï¼š(x¨¬)输入服务器的端口å?br />            System.out.println("2.误‚¾“å…¥æœåŠ¡å™¨ç«¯å£åøP¼Œé»˜è®¤è¯¯‚¾“入数å­? åQ?);
            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("!-正在‹¹‹è¯•˜qžæŽ¥æœåŠ¡å™¨ï¼Œè¯ïL(f¨¥ng)¨å€?..");
            if (consumer.testConnect(getIp, getPort))
            {
                System.out.println("!-˜qžæŽ¥æˆåŠŸåQ?);
                goahead = false;
            }
            else
                System.out.println("!-˜qžæŽ¥å¤ÞpÓ|åQŒæ?zh¨¨n)¨è¾“入的IPå?qi¨¢ng)端口号错误ã€?);
        }
       
        // ˜qžæŽ¥æœåŠ¡å™?br />        consumer.connectServer(getIp, getPort);
       
        // 输入æ˜ëЧ°
        boolean goon = true;
        while (goon)
        {
            // ½W¬ä¸‰æ­¥ï¼š(x¨¬)输入æ˜ëЧ°
            System.out.println("3.误‚¾“å…¥æ?zh¨¨n)¨ç™Õd½•后显½Cºçš„æ˜ëŠ§°(只能输入中文、英文字母及(qi¨¢ng)æ•°å­—)åQ?);
            String nick = input.next();
            boolean judge = consumer.checkNickName(nick);
            // 判断æ˜ëЧ°æ˜¯å¦è¾“入正确
            if (judge)
                goon = false;
            else
                System.out.println("!-æ‚(zh¨¨n)¨è¾“入的用户名不½W¦åˆæ¡äšgåQŒè¯·é‡æ–°è¾“å…¥åQ?);
        }
       
        // 开始运行接收数æ?br />        new Thread(consumer).start();
        // 聊天
        String mes = null;
        System.out.println("!-æ‚(zh¨¨n)¨æˆåŠŸè¿›å…¥èŠå¤©å®¤åQ?);
       
        while (!(mes = input.nextLine()).equalsIgnoreCase("-quit"))
        {
            // 如果输入"-test"命ä×o(h¨´)åQŒå¼€å§‹æµ‹è¯?br />            if (mes.trim().equalsIgnoreCase("-test"))
            {
                consumer.testConnect(getIp, getPort);
                // -getListåQšèŽ·å¾—åœ¨¾U¿ç”¨æˆ·åˆ—è¡?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();
                // 如果输入的是½Iºå­—½W¦ï¼Œåˆ™ä¸å‘é€?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-----------------");
    }
}



]]>
如何指定JAVA的运行参敎ͼŸhttp://www.aygfsteel.com/tiandizhijian/articles/383085.html¿U‹å¤©çš„å±±è°?/dc:creator>¿U‹å¤©çš„å±±è°?/author>Sat, 14 Jul 2012 04:31:00 GMThttp://www.aygfsteel.com/tiandizhijian/articles/383085.htmlhttp://www.aygfsteel.com/tiandizhijian/comments/383085.htmlhttp://www.aygfsteel.com/tiandizhijian/articles/383085.html#Feedback0http://www.aygfsteel.com/tiandizhijian/comments/commentRss/383085.htmlhttp://www.aygfsteel.com/tiandizhijian/services/trackbacks/383085.htmlrem ss.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% -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.aygfsteel.com/Images/adminlogo.gif -dir d:/wallpaper

 

 

 




]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º »ôÇñÏØ| Îä´¨ÏØ| ÎäÉ½ÏØ| Âé½­ÏØ| ³±°²ÏØ| Âé³ÇÊÐ| ¹óÄÏÏØ| »´ÄÏÊÐ| ÌìË®ÊÐ| Á¬É½| ³¤ÖÎÏØ| ¼ÃÑôÏØ| н¨ÏØ| ÆÑ½­ÏØ| ÎäÂ¡ÏØ| À¼¿¼ÏØ| Èð½ðÊÐ| ÖÐɽÊÐ| ¸»ÃñÏØ| ÒåÂíÊÐ| ÑÓ¼ªÊÐ| ½­ÒõÊÐ| Î¼Ô´ÏØ| Îå»ªÏØ| Ò˶¼ÊÐ| ÉÜÐËÏØ| ¹ÁÔ´ÏØ| ÄÇÆÂÏØ| ³ÐµÂÏØ| µËÖÝÊÐ| ̨ÄÏÏØ| ãôË®ÏØ| ¸Ê¹ÈÏØ| ÇØ»ÊµºÊÐ| ľÀ¼ÏØ| ÓÀ³ÇÊÐ| ɨɽÊÐ| À×ÖÝÊÐ| ÇåÕòÊÐ| »áÔóÏØ| µæ½­ÏØ|