您的位置:首页 > 编程语言 > Python开发

Flex 与Python之间Socket通讯

2011-12-20 11:45 337 查看
 查阅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()


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息