首页
网站建设
漏洞检测
漏洞修复
空间加固
整站程序
关于站长
联系我们
(整站程序)网页聊天室模块(FLV的聊天室) SWF格式[ 2008-05-19 15:21:31]
  

有空随便写了一个 FALSH 的聊天室,其服务器端是用 JAVA ,客户端是用的 FLASH

相比之前的网页版本(AJAX)聊天室,在性能,速度,时时性上面都有很大提升

下面贴出一写代码,供大家参考

package test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
import java.util.Vector;

public class Test {
        private ServerSocket server;
        Vector sManager=new Vector();//管理套接字的Vector
        Random rnd=new Random();//创建随机数的发生器
       
        public Test(){}
       
//      运行服务器
        void startServer()
        {
         try
         {
                server=new ServerSocket(8888);
                System.out.println("服务器已经启动!");
                while(true)
                {
                    Socket socket=server.accept();
                    System.out.println("客户机进入服务器");
                    new KBBCom_Thread(socket).start();
                    sManager.add(socket);
                    System.out.println("当前客户机连结数:"+sManager.size());
                }
         }catch(Exception e){}
        }
       
       
        class KBBCom_Thread extends Thread//与客户机进行通信的线程累
        {
            Socket socket; //套接字引用变量
            private DataInputStream reader; //套接字输入流
            private DataOutputStream writer; //套接字输出流
            KBBCom_Thread(Socket socket) //构造函数
            {
                    this.socket=socket;
            }
            public void run()
            {
                try
                {
                 //获取套接字的输入输出流
                    reader=new DataInputStream(socket.getInputStream());
                    writer=new DataOutputStream(socket.getOutputStream());
                    String msg;
                    //如果收到客户端发来的数据
                    while((msg=reader.readUTF())!=null)
                    {
            //writer.writeUTF(msg);
                        //writer.flush();
                       
                        sendMessageAll(msg);
                       
                        //System.out.println("来自客户机:"+msg);

                    }
                }catch(Exception e){}finally
                {
                    try
                    {
                        sManager.remove(socket);//删除套接字
                        //关闭输入输出流及套接字
                        if(reader!=null)reader.close();
                        if(writer!=null)writer.close();
                        if(socket!=null)socket.close();
                        reader=null;
                        writer=null;
                        socket=null;
                        //向屏幕输出相关信息
                        System.out.println("客户机离开服务器");
                        System.out.println("当前客户机的连接数:"+sManager.size());
                    }catch(Exception e){}
                }
            }
        }
       
        public void sendMessageAll(String msg){
         for(int i = 0;i<sManager.size();i++){
          Socket socket = (Socket)sManager.get(i);
          DataOutputStream writer = null;
          try {
     writer=new DataOutputStream(socket.getOutputStream());
     writer.writeUTF(msg);
                    writer.flush();
     
    } catch (Exception e) {
     
    }finally{
     try{
      //if(writer!=null)writer.close();
      //if(socket!=null)socket.close();
      //writer=null;
                    //socket=null;
     }catch(Exception ex){}
    }
          
         }
        }
       
        //main函数
        public static void main(String[] args) {
           
            Test server=new Test();
            server.startServer();
    }

}

 

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="initApp()" width="353" height="336">
<mx:Script>
        <![CDATA[
       
                import flash.net.Socket;
                import flash.utils.ByteArray;
                import flash.events.ProgressEvent;
               
                private var socket:Socket=new Socket();
                private var intClient:int;//定义客户端数字出拳
                private var intServer:int; //定义服务端数字出拳
                private var intSY:int; //定义输赢判断
                private var strClient:String;//客户端文字出拳
                private var strServer:String;//服务端的文字出拳
               
                public function initApp():void
                {
                        socket.connect("192.168.1.125",8888);
                        socket.addEventListener(Event.CONNECT,funConnect);
                        socket.addEventListener(Event.CLOSE,funClose);
                        socket.addEventListener(IOErrorEvent.IO_ERROR,ioerror);
                        socket.addEventListener(ProgressEvent.SOCKET_DATA,funSocket);
                       
                }
                public function funConnect(event:Event):void
                {
                        myText.text+="连接已建立 \n";
                }
                public function ioerror(event:IOErrorEvent):void{
                  myText.text+="无法连接到服务器 \n";
                }
                public function funClose(event:Event):void
                {
                        myText.text+="连接已关闭 \n";
                }
               
                public function sendMessage(msg:String):void
                {
                        var message:ByteArray=new ByteArray();
                        message.writeUTF(msg); //发送出拳数字
                        socket.writeBytes(message);
                        socket.flush();
                        myInput.text="";
                }
                public function funSocket(event:ProgressEvent):void//接到服务器信息
                {
                    var msg:String="";
                    while(socket.bytesAvailable)
                    {
                        msg=socket.readUTF();
                       
                        myText.text+=msg+"\n";
                       
                        myText.verticalScrollPosition = myText.maxVerticalScrollPosition;// myText滚动到最下面
                    }
                               
                }
               
        ]]>
</mx:Script>
        <mx:TextArea x="10" y="32" width="331" height="263" id="myText"/>
        <mx:TextInput x="10" y="303" width="245" id="myInput"/>
        <mx:Button x="273" y="304" label="发送" id="myBtn" click="sendMessage(myInput.text)"/>
       
</mx:Application>

 

 

相关文章:
大侠(125.120.20.131)于 2008-05-20 08:43:49 的留言:
  能不能和你交流一下,很想学习
站长回复:可以呀,加我 QQ 好了

姓    名:  *
留言内容:  *
电    话:
电子邮件: