一门好的语言需要良好的支持IO操作, Java有了Socket才有了JDBC, Servlet, Tomcat and etc.
先看下FLEX的XMLSocket.
XMLSocket提供的接口比较简单, 文档还有简单的例子, 跟Java区别写法比较大的就是它异步的回调.
FLASH客户端代码:
一门好的语言需要良好的支持IO操作, Java有了Socket才有了JDBC, Servlet, Tomcat and etc.
先看下FLEX的XMLSocket.
XMLSocket提供的接口比较简单, 文档还有简单的例子, 跟Java区别写法比较大的就是它异步的回调.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="800" height="600" creationComplete="initApp()">
<mx:Script><![CDATA[
import mx.controls.Alert;
private var sock:XMLSocket = null;
//Initial the GUI
private function initApp():void {
}
//Click logon
private function connectServer(event:MouseEvent):void {
if (this.sock != null)
return;
this.sock = new XMLSocket();
//Refer to XMLSocket document, follow the sample here
this.configureListeners(this.sock);
this.sock.connect("localhost", 8080);
this.sendButton.enabled = true;
}
public function send(data:Object):void {
this.sock.send(data);
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.CLOSE, closeHandler);
dispatcher.addEventListener(Event.CONNECT, connectHandler);
dispatcher.addEventListener(DataEvent.DATA, dataHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
}
private function closeHandler(event:Event):void {
trace("closeHandler: " + event);
this.appendLine("CLose event socket");
}
private function connectHandler(event:Event):void {
trace("connectHandler: " + event);
this.appendLine("Send: connect to server sucessfully." + event.target.toLocaleString());
}
private function appendLine(mesg:String):void {
//The /0 will be added automatically like C
this.messageArea.text += (mesg);
}
private function dataHandler(event:DataEvent):void {
trace("dataHandler: " + event);
this.appendLine("Server Response:" + event.data);
//this.messageArea.text += ("Server Response:" + event.target.toLocaleString() + "/r/n");
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
this.appendLine("Oops, ioError");
}
private function progressHandler(event:ProgressEvent):void {
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
this.appendLine("Oops, encounter security error:" + event.text);
}
private function sendMessage(event:MouseEvent):void {
var message:String = this.messageField.text;
//message = "<message>" + message + "</message>/r/n";
message = message + "/r/n";
if (message != null && message.length > 0) {
this.send(message);
//this.messageArea.text += ("Send:" + message + "/r/n");
this.appendLine("Send:" + message );
}
}
]]>
</mx:Script>
<mx:TextArea x="10" y="10" width="780" height="386" id="messageArea"/>
<mx:TextInput x="10" y="416" width="536" height="31" id="messageField"/>
<mx:Button x="577" y="416" label="Send" height="31" width="69" id="sendButton" enabled="false" click="sendMessage(event)"/>
<mx:Button x="669" y="416" label="Logon" height="31" id="logonButton" click="connectServer(event)"/>
</mx:Application>
JAVA服务器:
/*
* testflex.CellPhoneLocator.java 2008-12-23
*/
package testflex;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;