查阅Adobe提供的API文档可以了解到,XMLSocket提供了四个公开方法:
1、XMLSocket(host:String=null,port:int=0)--创建一个新的XMLSocket对象。
2、close():void--关闭一个XMLSocket。
3、connect(host:String,port:int):void--连接到指定的TCP端口。
4、send(object:*):void--将数据发送到连接服务端。
客户端Flex代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
creationComplete="init()">
<mx:Script>
<![CDATA[
private var custSocket:Socket;
[Bindable] private var response:String = "";
private function init():void
{
custSocket = new Socket("localhost", 21567);
configureListeners();
}
private function onClick(evt:Event):void
{
sendRequest();
}
private function configureListeners():void
{
custSocket.addEventListener(Event.CLOSE, closeHandler);
custSocket.addEventListener(Event.CONNECT, connectHandler);
custSocket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
custSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
custSocket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
}
private function writeln(str:String):void
{
str += "\n";
try {
custSocket.writeUTFBytes(str);
}
catch(e:IOError) {
trace(e);
}
}
private function sendRequest():void
{
trace("sendRequest");
writeln(inTxt.text);
custSocket.flush();
}
private function readResponse():void
{
var str:String = custSocket.readUTFBytes(custSocket.bytesAvailable);
response += str;
}
private function closeHandler(event:Event):void
{
trace("closeHandler: " + event);
trace(response.toString());
}
private function connectHandler(event:Event):void
{
trace("connectHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void
{
trace("ioErrorHandler: " + event);
}
private function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
}
private function socketDataHandler(event:ProgressEvent):void
{
trace("socketDataHandler: " + event);
readResponse();
}
]]>
</mx:Script>
<mx:TextArea text="{response}" id="outTxt"
height="126" width="283" fontSize="12"/>
<mx:HBox verticalAlign="bottom" width="282" height="40">
<mx:TextArea id="inTxt" width="100%" height="100%" fontSize="12"/>
<mx:Button label="发送" fontSize="12" click="onClick(event)"/>
</mx:HBox>
</mx:Application>
服务器端Python代码:
#!/usr/bin/env python
#coding=utf-8
from socket import *
from time import ctime
HOST=‘localhost’
PORT=21567
BUFSIZ=4096
ADDR=(HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print ‘waiting for connection…’
tcpCliSock, addr = tcpSerSock.accept()
print ‘…connected from:’, addr
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send(‘[%s] %s’ % (ctime(), data))
tcpCliSock.close()
tcpSerSock.close()