??????????????????
???????????? ???????[ 2012/9/7 11:53:27 ] ????????
??????????????????????????????????????????????Щ???????????????????????????????????????????????Щ???????????????δ???????????Щ???????????????????????????????????????????????????Flash??????棬??????????????????????????????????????????????Щ????????????????????????????????????????????C/S?????Flash?????????????????γ????
????Flash??????????????????????????????Socket?????AS3.0???????????????????????XML??????????XMLSocket??????????????????Socket?????????????????????????XML????????????????????????????????????????????????XMLSocket?????Socket?????????????????Χ?????????????
???????????????????м????н??????????γ?????????????δ??????????λ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????Flash??Socket?????????TCP??????????????????????????ν?????????????????????Щ???????????????????????????????????????????????????????????????????????????????????????ж???????????????????????????????????????????????????????????????????????????????????????????δ???????????????????????????????????λ?????????????????????浽?????У?????????????????????????е??????δ?????????
package
{
import flash.display.Sprite;
import flash.net.Socket;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.errors.IOError;
import flash.events.MouseEvent;
import flash.errors.EOFError;
import flash.system.Security;
import flash.utils.ByteArray;
/**
*
* @author whk
*/
public class SocketExample extends Sprite
{
private var targetServer:String = "192.168.0.68"; //????ip???
private var port:uint = 9991; //??????
private var socket:Socket;
private var str:String;
private var response:String;
private var msgLenMax:int; //????????????
private var msgLen:int; //???????
private var headLen:int; //????????
private var isReadHead:Boolean; //??????????????
private var bytes:ByteArray; //??????????????????????????????????
public function SocketExample()
{
isReadHead = true;
headLen = 2; //2?????
msgLenMax = 4028;
bytes = new ByteArray();
//Security.loadPolicyFile("socket://"+targetServer+":"+port);
socket = new Socket();
btnSend.enabled = false;
btnConnect.addEventListener(MouseEvent.CLICK?? btnHandler);
}
/**
* ?????????
*/
private function btnHandler(event:MouseEvent):void
{
switch (event.target.name)
{
case "btnConnect":
btnLabel();
break;
case "btnSend":
sendRequest();
break;
}
}
private function btnLabel():void
{
if (btnConnect.label == "????" || btnConnect.label == "????????")
{
//???socket???
configureListeners();
//????socket????
connectToSocketServer();
}
if (btnConnect.label == "???????")
{
if (socket.connected)
{
socket.close();
btnConnect.label = "????";
pringMessage("?????????????");
}
}
}
/**
* ????socket??????
*/
private function connectToSocketServer():void
{
try
{
socket.connect(targetServer?? port);
}
catch (error:SecurityError)
{
pringMessage("SecurityError: " + error);
}
}
private function configureListeners():void
{
socket.addEventListener(Event.CONNECT?? connectHandler);
socket.addEventListener(Event.CLOSE?? closeHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR?? ioErrorHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR?? securityErrorHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA?? socketDataHandler);
}
/**
* ??????
*/
private function connectHandler(event:Event):void
{
btnSend.enabled = true;
btnConnect.label = "???????";
pringMessage("??????" + "
" + "connectHandler: " + event + "
");
btnSend.addEventListener(MouseEvent.CLICK?? btnHandler);
trace("connectHandler: " + event);
trace(txtRead.text);
}
/**
* ???????????????
*/
private function sendRequest():void
{
trace("sendRequest");
response = "";
//????????
writeln("GET /");
}
private function writeln(str:String):void
{
str += txtSend.text + "
";
if (socket.connected)
{
try
{
//??UTF-8?????д???????
socket.writeInt(int(str));
txtRead.text += "??????????????" + str;
socket.flush();
}
catch (error:IOError)
{
pringMessage("socket.flush error
" + error);
}
}
else
{
//????socket????
connectToSocketServer();
}
}
/**
* ??????????????
*/
private function socketDataHandler(event:ProgressEvent):void
{
trace("socketDataHandler: " + event);
readResponse();
}
private function readResponse():void
{
try
{
//parseNetData();
var str:String = socket.readUTFBytes(socket.bytesAvailable);
response += str;
trace(response);
//?????????
while (socket.bytesAvailable)
{
var data:int = socket.readByte();
trace(data);
}
txtRead.text += "??????????" + str + "
";
}
catch (error:IOError)
{
pringMessage("??socket??????????????I/O ??
" + "socket.read error
" + error);
}
catch (error:EOFError)
{
pringMessage("???????????????????EOF??
" + "socket.read error
" + error);
}
}
/**
* ??????????????
* ??????????????????
*/
private function parseNetData():void
{
//????????????
if (isReadHead)
{
if (socket.bytesAvailable >= headLen)
{
//????????????????ж??
msgLen = socket.readShort();
isReadHead = false;
}
}
//?????????????????????????????????????????
if (!isReadHead && msgLen <= msgLenMax)
{
//????0?????????????
if (msgLen == 0)
{
//???????????0?????????????????????????????????????????????????????
return;
}
//????????????????????????????????
if (socket.bytesAvailable >= msgLen)
{
//?????
bytes.position = 0;
//??????????????????
socket.readBytes(bytes?? 0?? msgLen);
isReadHead = true;
}
}
//??????????????????????????????????????
if (socket.bytesAvailable >= headLen)
{
parseNetData();
}
}
/**
* socket?????????????
*/
private function closeHandler(event:Event):void
{
btnConnect.label = "????????";
pringMessage("socke??????????
" + "closeHandler: " + event);
trace("closeHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void
{
trace("ioErrorHandler: " + event);
pringMessage("????/??????????·?????????????
" + "ioErrorHandler: " + event);
}
private function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
pringMessage("????????????÷???????????????????????? 1024 ????
" + "securityErrorHandler: " + event);
}
/**
* ?????????????
* @param m:????????
*/
private function pringMessage(m:String = null):void
{
txtError.visible = true;
if (m == null)
{
txtError.text = "";
txtError.visible = false;
return;
}
if (txtError.text == null)
{
txtError.text = "";
txtError.visible = false;
}
txtError.text = m;
}
}
}
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11