1. 程式人生 > >【cocos2dx網路遊戲】搭建CS架構的基本通訊框架(一)server

【cocos2dx網路遊戲】搭建CS架構的基本通訊框架(一)server

#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;
};