flash与c++进行Socket进行简单通信
发布时间:2020-12-15 17:52:36 所属栏目:百科 来源:网络整理
导读:一、简介 ? ? ? 用flash去开发应用,免不了网络通讯,特别是网络游戏,需要用到即使通讯。 as3提供了两个支持即时通讯的类:XMLSocket和Socket, ? ? ? 前者其实是只支持发送字符串,而后者就强大多了,支持发送字节,相对来说比较底层,而这也给我们更多的发
一、简介 ? ? ? 用flash去开发应用,免不了网络通讯,特别是网络游戏,需要用到即使通讯。 as3提供了两个支持即时通讯的类:XMLSocket和Socket, ? ? ? 前者其实是只支持发送字符串,而后者就强大多了,支持发送字节,相对来说比较底层,而这也给我们更多的发挥空间。 ????? 其实,flash socket的网络底层接受数据,就以与c++服务器通讯为列子。 二、代码 ?? C++代码: ? #include <iostream>///加载需要的头文件 关于输入输出 #include <winsock2.h> ///socket套接字头文件 using namespace std; ///使std命名空间全部展开不用每次在写std::前缀了 WSADATA wsaData;//WSADATA 是一个结构 说明需要装载的dll的版本相关信息 SOCKET listeningSocket;//监听连接的socket SOCKET newConnection;//已经连接的socket SOCKADDR_IN serverAddr;//服务器的相关信息 SOCKADDR_IN clientAddr;//连接端的相关信息 char message[256];//用来读取客户的发送来的消息 int main(int argc,char *argv[])///程序的入口 { //装载dll文件 WSAStartup(MAKEWORD(2,2),&wsaData); //创建一个新的嵌套字来监听客户端连接,使用TCP协议 listeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //建立SOCKADDR_IN结构,为bind做好准备 serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(30006); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); bind(listeningSocket,(SOCKADDR*)(&(serverAddr)),sizeof(serverAddr)); listen(listeningSocket,5); //开始监听,最多可以处理的连接请求为5 int ClientAddrLen = sizeof(struct sockaddr_in); //struct sockaddr_in结构的大小 //****等待连接,一直阻塞到获得连接 //返回连接的socket //参数1 被绑定的socket //参数2 当发生请求时被填充的结构 //参数3 第2个参数的结构大小 这里必须给的是地址 newConnection = accept(listeningSocket,(SOCKADDR*)(&clientAddr),&ClientAddrLen); //****发送数据**** //参数1是已连接的socket //参数2是一个字符串 //参数3是字符串的大小 //参数4是状态默认为0 send(newConnection,"socket is ok ",(int)strlen("socket is ok ")+1,0); //****接收数据**** //参数1是已连接的socket //参数2是一个char数组 //参数3是传送中最多所能容纳的字节数 //参数4是状态默认0 recv(newConnection,message,256,0); cout<<"flash传递过来的参数是"<<message<<endl; //关闭socket closesocket(newConnection); closesocket(listeningSocket); WSACleanup(); system("PAUSE"); ///让屏幕出现按任意键结束的提示没有此句程序运行直接退出 return EXIT_SUCCESS; ///返回 } ??? ActionScript代码: package { import flash.utils.ByteArray; import flash.net.Socket; import flash.events.ProgressEvent import flash.display.Sprite; public class Client extends Sprite { private var socket:Socket = new Socket(); private var byteArray:ByteArray = new ByteArray(); public function Client() { socket.connect("127.0.0.1",30006); socket.addEventListener( ProgressEvent.SOCKET_DATA,onSocketData ); trace("启动Socket。。。。。。"); } function onSocketData(e:ProgressEvent ):void { socket.readBytes(byteArray); trace("c++传递过来的参数:"+byteArray); socket.writeBytes(byteArray); socket.flush(); } } } 注意:? 未解决flash安全沙箱问题,该实例的运行flash 是运行在 adobe flash cs4上的。 ??? 关于flash安全沙箱问题的解决在文章:flash socket通讯安全沙箱问题解决 中说明 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |