笔者所用的flash版本为Adobe Flash CS4 Professional,如果有的读者所用的版本不是该版本而引起的调试错误,可以自己尝试修改。大胆猜测,版本之间的差距不是很多,出去在前版本中在帧中添加代码已经不可取,所以采用的是添加 .as 文件进行代码编程。
首先新建一个Flash文件,笔者选用的是ActionScript3.0版本的项目。至于项目中的其他内容,这里不加涉及,这里只是涉及通讯部分。
然后点击“文件”->“新建”->“ActionScript文件”点击确定。生成一个脚本文件,该文件保存的时候可以修改读者自定义的名称。在脚本文件的右侧有个目标选项,选择需要进行socket通讯的*.fla文件。
package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.text.TextField;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.display.Stage;
import flash.display.StageDisplayState;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
//Socket通信部分
import flash.net.Socket;
import flash.events.*;
import flash.errors.*;
import flash.display.SimpleButton;
//Socket通信部分
public class Main extends Sprite
{
//Socket通信部分
private var mySocket:Socket;
//Socket通信部分
private var star:MovieClip;
public function Main()
{
//隐藏鼠标
Mouse.hide();
stage.addEventListener(MouseEvent.CLICK, SendData);
mySocket = new Socket();
mySocket.addEventListener(Event.CONNECT, OnConnect);
mySocket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
mySocket.addEventListener(ProgressEvent.SOCKET_DATA, receivedata);
mySocket.connect("127.0.0.1", 6000);
}
private function OnConnect(e:Event):void
{
trace("连接成功!");
mySocket.writeUTFBytes("Test successful2/n");
mySocket.flush();//send the message
}
private function ioErrorHandler(e:IOErrorEvent):void
{
trace("连接失败!");
}
private function receivedata(e:ProgressEvent):void
{
// trace("收到的字节数"+mySocket.bytesAvailable);
var msg:String = "";
while (mySocket.bytesAvailable)
{
msg += mySocket.readMultiByte(mySocket.bytesAvailable,"utf8");
}
trace(msg);
}
private function SendData(e:MouseEvent):void
{
trace("发送");
mySocket.writeUTFBytes("I am flash/n");
mySocket.flush();//send message
}
}
}
说明:
mySocket.connect("127.0.0.1", 6000);
如果是本机上运行分别运行了flash和mfc则可以使用“127.0.0.1”,端口可以自己决定但是两边的程序要相同,并且最好大于大于1024。
创建Flash播放器。在保存Flash的文件内找到*.swf文件,打开。点击“文件”->“播放器”即可。另外要将创建的播放器放置在MFC的Debug文件夹内。
运行MFC程序,即可实现二者之间的通信。
如有疑问,欢迎大家留言,感谢我曾经参考过,但是现在无法确定网址的前辈们。