我有一个项目尝试使用 XMLSocket 将 XML 发送到另一端监听它的服务器。
申请文件为:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import MyConnection;
[Bindable]
public var conn:MyConnection = new MyConnection(33333);
]]>
</mx:Script>
<mx:VBox>
<mx:Button label="Click me" buttonDown="conn.sendXml()" />
</mx:VBox>
</mx:Application>
MyConnection.as 是:
package
{
import flash.errors.*;
import flash.events.*;
import flash.net.XMLSocket;
public class MyConnection {
private var hostName:String = "localhost";
private var port:uint = 33333;
private var socket:XMLSocket;
private var xmlData:XML;
public function MyConnection(port:int) {
super();
this.port = port;
socket = new XMLSocket();
configureListeners(socket);
}
/**
* @throws IOError
*/
public function sendXml():void {
xmlData =
<body>
<action>Hello</action>
<name>Kittie</name>
</body>
socket.connect(hostName, port);
}
/**
* @param dispatcher IEventDispatcher
*/
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);
}
private function connectHandler(event:Event):void {
trace("connectHandler: " + event);
socket.send(xmlData);
socket.close();
xmlData = null;
}
private function dataHandler(event:DataEvent):void {
trace("dataHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
private function progressHandler(event:ProgressEvent):void {
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
}
}
正如您可能看到的,这与语言参考中的 XMLSocket 示例非常相似。
但是,嗅探服务器接收到的数据,我得到一个没有结束标记的截断 XML
Got connection from 127.0.0.1
<body>
<action>Hello</action>
<name>Kittie</name>
127.0.0.1 disconnected
并且结束标签会出现在下一次发送数据时,即
Got connection from 127.0.0.1
</body><body>
<action>Hello</action>
<name>Kittie</name>
127.0.0.1 disconnected
任何想法为什么会发生这种情况?有什么建议么?
我必须在每个请求上打开和关闭套接字,但即使为了测试而尝试不这样做也无济于事
谢谢!
卡纳夫