`
wgcode
  • 浏览: 577084 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • C++
阅读更多

c++ flash都是人们耳熟能详的东西了 有没有想过自己动手来做一个属于自己的游戏服务器?
其实 入门阶段真的不会像人们想象的那末难。虽然后来会有线程,服务器优化等内容,但是那些都是后话了 相信经过您自己的补给和进步 都会一一克服的
您可以自由选择编译器 这里由于不想下载vc(太大了) 所以介绍另一款也在业界比较知名的编译器 Dev 可以在网上下载到 客户端自然就是flash了:)让我们动手把
先在Dev新建一个工程 我这里叫Socket 然后生成Console(控制台应用程序 这里因为是开始 所以避开了琐碎的图形界面 选择这个足以) 然后就可以看见编译器为我们生成了相应的代码

#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;//监听连接的socket
SOCKET newConnection;//已经连接的socket
SOCKADDR_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));
//开始监听喽 最多可以处理的连接请求为5
listen(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个是状态 默认0
send(newConnection,"socket is ok\0",(int)strlen("socket is ok\0")+1,0);

//等待接受的数据 注意这里同样是没有就会等待
//第一个是方才连接的soclet 第2个是一个char得数组 
//第3个是传送得最多容纳 第4个状态 默认0  这2状态一般不用 就设定为0
recv(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种的 大家哪个熟悉就参考哪个吧)
下次再继续拉:) 大家加油

 

分享到:
评论

相关推荐

    Visual C++程序开发范例宝典(光盘) 第八部分

    Visual C++程序开发范例宝典配套光盘,因大小受限,所以分成8部分上传,必须全部下载才能正常解压! 第1章 窗体与界面设计 1.1 菜单应用实例 实例001 在系统菜单中添加菜单项 实例002 带图标的程序菜单 实例003...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例226 对SQLServer数据库进行录入和提取多媒体文件   cc实例227 对SQLcServer数据库进行录入和存储Word文档   8.10 数据备份恢复   cc实例228 Access数据库备份与还原   cc实例229 SQLcServer...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    119 利用Image控件制作小动画 cc实例120 透明的Flash动画 cc实例121 播放GIF动画 cc实例122 播放AVI动画 cc实例123 播放VCD 4.2 制作与播放音频 cc实例124 可以选择播放曲目的CD播放器 cc实例125 MP3...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例226 对SQLServer数据库进行录入和提取多媒体文件   cc实例227 对SQLcServer数据库进行录入和存储Word文档   8.10 数据备份恢复   cc实例228 Access数据库备份与还原   cc实例229 SQLcServer...

    Visual C++程序开发范例宝典(光盘) 第四部分

    Visual C++程序开发范例宝典配套光盘,因大小受限,所以分成8部分上传,必须全部下载才能正常解压! 第1章 窗体与界面设计 1.1 菜单应用实例 实例001 在系统菜单中添加菜单项 实例002 带图标的程序菜单 实例003...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    JAVA上百实例源码以及开源项目

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包2

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包7

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics