首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Flash >

利用c++跟flash联合写游戏服务器

2012-12-21 
利用c++和flash联合写游戏服务器#include iostream //加载需要的头文件 关于输入输出using namespace st

利用c++和flash联合写游戏服务器

#include <iostream> //加载需要的头文件 关于输入输出using namespace std;//使std命名空间全部展开 不用每次在写std::前缀了int main(int argc, char *argv[])  //程序的入口{ system("PAUSE");//让屏幕出现按任意键结束的提示 没有此句程序运行直接退出 return EXIT_SUCCESS;//返回}

?

好的 基本的框架就是这些 骨头已经有了 现在我们来添加肉
首先我们加入网络编程需要的头文件

#include <winsock2.h>然后在main中申请几个变量WSADATA wsaData;//WSADATA 是一个结构 说明需要装载的dll的版本相关信息SOCKET listeningSocket;//监听连接的socketSOCKET newConnection;//已经连接的socketSOCKADDR_IN serverAddr;//服务器的相关信息SOCKADDR_IN clientAddr;//连接端的相关信息char message[256];//用来读取客户的发送来的消息

?


接着

//装载dll文件WSAStartup(MAKEWORD(2,2),&wsaData);//创建一个新的嵌套字来监听客户端连接 使用TCP协议listeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//建立一个SOCKADDR_IN结构,结构告知bind监听30006端口上所有的连接serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(30006);serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);//使用bind将这个地址信息和嵌套字关联起来bind(listeningSocket,(SOCKADDR*)(&(serverAddr)),sizeof(serverAddr));//开始监听喽 最多可以处理的连接请求为5listen(listeningSocket,5);//struct sockaddr_in结构的大小int ClientAddrLen = sizeof(struct sockaddr_in);//等待连接 无连接则无限等待 //返回连接的socket//参数1 被绑定的socket//参数2 当发生请求时被填充的结构//参数3 第2个参数的结构大小 这里必须给的是地址newConnection = accept(listeningSocket,(SOCKADDR*)(&clientAddr),&ClientAddrLen);//好了 到这里我们知道flash不连接是不会往下运行的 所以我们想一下//当flash连接后我们给他返回个"socket is ok"得字样 然后再接受一次//flash传递的参数 程序就退出 //给flash发送参数 第一个是刚才连接的socket 第2个是参数 //第3个是参数的大小 第4个是状态 默认0send(newConnection,"socket is ok\0",(int)strlen("socket is ok\0")+1,0);//等待接受的数据 注意这里同样是没有就会等待//第一个是方才连接的soclet 第2个是一个char得数组 //第3个是传送得最多容纳 第4个状态 默认0  这2状态一般不用 就设定为0recv(newConnection,message,256,0);//输出传过来的内容cout<<"flash穿过的参数是"<<message<<endl;//最后关闭socket和退出closesocket(newConnection);closesocket(listeningSocket);WSACleanup();

?
按crtl+f9编译 奇怪 怎莫出错了??原来需要设置下编译器在工具选择编译选项 然后在下边的在连接命令行加入打勾 在下边输入-lwsock32
在编译 ok
然后按crtl+f10 程序运行了

现在来写flash把  flash我就简单带过了 有兴趣的朋友在仔细研究把:)
建立一个flash AS3得项目

import flash.utils.ByteArray;import flash.net.Socket;var socket:Socket = new Socket();socket.connect("127.0.0.1",30006);socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );var byteArray:ByteArray = new ByteArray();function onSocketData(event:ProgressEvent ):void {    socket.readBytes(byteArray);    trace("c++过来的参数:"+byteArray);    socket.writeUTFBytes("good bye");    socket.flush();}

?

呼呼 累死了 是不是很简单呢??
不过用java书写以上代码 还要更简单呢:) 而且更容易明白 不信我就在写一篇java得简单的socket 比较下拉:) (准备java和这个同步进行:)每次写2种的 大家哪个熟悉就参考哪个吧)
下次再继续拉:) 大家加油

?

热点排行