Flex和java的socket通信(四)一个简单的聊天室
知识点:消息广播者类名为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 <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="initApp()" width="369" height="326"> <mx:Script> <![CDATA[ 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+="连接已建立 n"; } internal function funClose(event:Event):void { myText.text+="连接已关闭 n"; } internal function sendMessage(msg:String):void //发送数据到服务器 { //新建一个ByteArray来存放数据 var message:ByteArray=new ByteArray(); //写入数据,使用writeUTFBytes以utf8格式传数据,避免中文乱码 message.writeUTFBytes(msg+"n"); //写入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"); //使用n换行符号把信息切开 var arr:Array=msg.split('n'); for(var i:int=0;i<arr.length;i++) { if(arr[i].length>1) { //正则表达式,回车符 var myPattern:RegExp=/r/; //删除回车符 arr[i]=arr[i].replace(myPattern,''); //在聊天框中输出 myText.text+=arr[i]+"n"; } } myText.verticalScrollPosition = myText.maxVerticalScrollPosition;//滚动到最下面 } } ]]> </mx:Script> <mx:TextArea x="10" y="42" width="344" height="247" id="myText"/> <mx:TextInput x="10" y="297" width="270" id="myInput"/> <mx:Button x="288" y="298" label="发送" id="myBtn" click="sendMessage(myName.text+':'+myInput.text)"/> <mx:TextInput x="10" y="10" width="344" text="名字" id="myName"/> </mx:Application> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |