【cocos2dx网络游戏】搭建CS架构的基本通信框架(一)server

新建空白win32项目MServer 
新建main.cpp 
#include <iostream>
using namespace std;

#include "comm.h"
void proc_data(socket_type sock)
{

}
//处理网络连接
void proc_accept()
{
	cout<<"wait connect..."<<endl;
	io_service ios;  //asio程序必须的io_service对象
	ip::tcp::endpoint ep(ip::tcp::v4(), PORT_NUM);

	//用于接收连接
	ip::tcp::acceptor acceptor(ios, ep);

	while (true)
	{

		//初始化一个socket对象
		socket_type sock(new ip::tcp::socket(ios));

		//阻塞等待socket连接
		acceptor.accept(*sock);
               //为每一个建立连接的客户端建立一个线程处理数据
               thread t(proc_data, sock);
	}
} 

int main(int argc, char *argv[])
{
	//创建线程,以及传递线程处理函数
	thread t1(proc_accept);

	//线程阻塞等待,知道线程处理结束
	t1.join();
	return 0;
};
上面创建了一个线程用来处理网络连接,并且为每个建立连接的客户端建立了一个线程用来处理数据
为了跟客户端一致,我们先新建了一个目录  share,项目增加附加目录share 新建 comm.h
#ifndef _COMM_H_
#define _COMM_H_

#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/thread.hpp>
#include <boost/asio/placeholders.hpp>


#include <boost/date_time/posix_time/posix_time.hpp>

using namespace boost::asio;

using namespace boost;


#include <string>
#include <vector>

#include <iostream>
using namespace std;


#define PORT_NUM  9999 //端口号 
typedef  boost::shared_ptr<ip::tcp::socket> socket_type; 

#endif
接下来处理连接数据
#include <iostream>
using namespace std;

#include "comm.h"

void proc_data(socket_type sock)
{
	//输出客户端的地址的字符串
	cout<<"client connected :"<<sock->remote_endpoint().address()<<endl;

	while (true)
	{
		//捕获可能发生的异常
		try
		{
			//使用字符数组
			vector<char> str(100, 0);

			//读取客户端发送的数据
			//同步机制,阻塞读取数据
			sock->read_some(buffer(str));
			cout<<"recv from:"<<sock->remote_endpoint().address()<<endl;
			cout<<"data:"<<&str[0]<<endl;
			cout<<endl;

			//将客户端发送的数据回显
			sock->write_some(buffer(str));
		}

		catch(std::exception& e)
		{
			cout<<e.what()<<endl;
			break;
		}
	}
}


//处理网络连接
void proc_accept()
{
	cout<<"wait connect..."<<endl;
	io_service ios;  //asio程序必须的io_service对象
	ip::tcp::endpoint ep(ip::tcp::v4(), PORT_NUM);

	//用于接收连接
	ip::tcp::acceptor acceptor(ios, ep);

	while (true)
	{

		//初始化一个socket对象
		socket_type sock(new ip::tcp::socket(ios));

		//阻塞等待socket连接
		acceptor.accept(*sock);

		//为每一个建立连接的客户端建立一个线程处理数据
		thread t(proc_data, sock);
	}
}


int main(int argc, char *argv[])
{
	//创建线程,以及传递线程处理函数
	thread t1(proc_accept);

	//线程阻塞等待,知道线程处理结束
	t1.join();
	return 0;
};





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值