(四)一个简单的聊天室
目的:做一个简单的聊天室,用来实现消息广播。
服务端代码:Server5.java
知识点:
消息广播者类名为Bmanager,他继承了Vector类
class Bmanager extends Vector
{
Bmanager(){}
void add(Socket socket)
{
//添加套接字
}
void remove(Socket socket)
{
//删除套接字
}
synchronized void sendToAll(String msg)
{‘
//使用套接字的输出流,输出消息
}
synchronized void sendClientInfo()
{
//使用套接字的输出流,输出当前聊天人数
}
}
客户端代码:Client5.mxml
-
-
-
- import flash.net.Socket; //导入类包
- import flash.utils.ByteArray;//ByteArray在读取数据时使用
- private var socket:Socket=new Socket();//定义socket
- internal function initApp():void
- {
- socket.connect("127.0.0.1",8888);//执行连接
- //监听连接成功事件
- socket.addEventListener(Event.CONNECT,funConnect);
- //监听关闭事件
- socket.addEventListener(Event.CLOSE,funClose);
- //监听服务器新信息
- socket.addEventListener(ProgressEvent.SOCKET_DATA,funSocket);
- }
- internal function funConnect(event:Event):void
- {
- myText.text+="连接已建立 ";
- }
- internal function funClose(event:Event):void
- {
- myText.text+="连接已关闭 ";
- }
- internal function sendMessage(msg:String):void //发送数据到服务器
- {
- //新建一个ByteArray来存放数据
- var message:ByteArray=new ByteArray();
- //写入数据,使用writeUTFBytes以utf8格式传数据,避免中文乱码
- message.writeUTFBytes(msg+" ");
- //写入socket的缓冲区
- socket.writeBytes(message);
- //调用flush方法发送信息
- socket.flush();
- //清空消息框
- myInput.text="";
- }
- //接受服务器信息
- internal function funSocket(event:ProgressEvent):void
- {
- var msg:String="";
- //循环读取数据,socket的bytesAvailable对象存放了服务器传来的所有数据
- while(socket.bytesAvailable)
- {
- //强制使用utf8格式,避免中文乱码
- msg+=socket.readMultiByte(socket.bytesAvailable,"utf8");
- //使用换行符号把信息切开
- var arr:Array=msg.split(' ');
- for(var i:int=0;i {
- if(arr[i].length>1)
- {
- //正则表达式,回车符
- var myPattern:RegExp=/ /;
- //删除回车符
- arr[i]=arr[i].replace(myPattern,'');
- //在聊天框中输出
- myText.text+=arr[i]+" ";
- }
- }
- myText.verticalScrollPosition = myText.maxVerticalScrollPosition;//滚动到最下面
- }
-
- }
- ]]>
-
-
-
-
-