青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽牛散步
仗劍走天涯

初讀代碼

這一節(jié)大部分內(nèi)容整理自ICE中文手冊,在這里我特別感謝馬維達(dá)同志的翻譯給我們的學(xué)習(xí)帶來了方便。

讀服務(wù)端代碼

文件server.cpp. 

#include <Ice/Ice.h> 		
#include "../print.h"
using namespace std;
using namespace Demo;

//慣例,用后綴I 表示這個(gè)類實(shí)現(xiàn)一個(gè)接口
class PrinterI : public Printer {
public:
	virtual void printString(const string& s, const Ice::Current&);
};	 
/*
打開print.h,看看PrinterI父類的定義

namespace Demo {
class Printer : virtual public Ice::Object {
public:

//純虛函數(shù),不能實(shí)例化
virtual void printString(const std::string&,
//第二個(gè)參數(shù)有缺省值,實(shí)現(xiàn)中可以不使用
const Ice::Current&= Ice::Current()) = 0;
};
};
*/

void PrinterI::printString(const string& s, const Ice::Current&)
{
	cout << s << endl;
}

int  main(int argc, char* argv[])
{	
	//程序的退出時(shí)的狀態(tài),就是否成功執(zhí)行
	int status = 0; 

	 //來包含Ice run time 的主句柄	(main handle)
	Ice::CommunicatorPtr ic;

	try {
	//初始化Ice run time (argc和argv是run time命令參數(shù);
	//就這個(gè)例子而言,服務(wù)器不需要任何命令行參數(shù))。
    //initialize 返回一個(gè)指向Ice::Communicator對(duì)象的智能指針,
	//這個(gè)指針是Ice run time 的主句柄。
		ic = Ice::initialize(argc, argv);
	 
	 //調(diào)用Communicator 實(shí)例上的createObjectAdapterWithEndpoints,
	 //創(chuàng)建一個(gè)對(duì)象適配器(比如:網(wǎng)卡就是一種適配器)。
	 //參數(shù)是"SimplePrinterAdapter" (適配器的名字)
	 //和"default -p 10000"(用缺省協(xié)議(TCP/IP),偵聽端口10000 的請求。)
	 //顯然,在應(yīng)用中硬編碼對(duì)象標(biāo)識(shí)和端口號(hào),是一種糟糕的做法,
	 //但它目前很有效;我們將在以后看到在架構(gòu)上更加合理的做法。
		Ice::ObjectAdapterPtr adapter
			= ic->createObjectAdapterWithEndpoints(
			"SimplePrinterAdapter", "default -p 10000");

	  //服務(wù)器端run time 已經(jīng)初始化,實(shí)例化一個(gè)PrinterI 對(duì)象,
	  //為我們的Printer 接口創(chuàng)建一個(gè)servant(serv 服務(wù)+-ant人,背一下單詞)。
		Ice::ObjectPtr object = new PrinterI;

	  //我們調(diào)用適配器的add,告訴它有了一個(gè)新的servant ;
	  //傳給add 的參數(shù)是剛才實(shí)例化的servant,再加上一個(gè)標(biāo)識(shí)符。
	  //在這里,"SimplePrinter" 串是servant 的名字
	  //(如果我們有多個(gè)打印機(jī),每個(gè)打印機(jī)都可以有不同的名字,
	  //更正確的說法是,都有不同的對(duì)象標(biāo)識(shí))。
		adapter->add(object,
			Ice::stringToIdentity("SimplePrinter"));

		//調(diào)用適配器的activate 方法激活適配器
		//(適配器一開始是在暫停(holding)狀態(tài)創(chuàng)建的;
		//這種做法在下面這樣的情況下很有用:
		//我們有多個(gè)servant,它們共享同一個(gè)適配器,
		//而在所有servant實(shí)例化之前我們不想處理請求)。
		//一旦適配器被激活,服務(wù)器就會(huì)開始處理來自客戶的請求。
		adapter->activate();

		//最后,我們調(diào)用waitForShutdown。
		//這個(gè)方法掛起發(fā)出調(diào)用的線程直到服務(wù)器實(shí)現(xiàn)終止
		//——或者是通過發(fā)出一個(gè)調(diào)用關(guān)閉run time,
		ic->waitForShutdown();
	} 
	catch (const Ice::Exception& e) {
			cerr << e << endl;
		status = 1;
	} catch (const char* msg) {
		cerr << msg << endl;
		status = 1;
	}
	if (ic) {
		try {

		//必須調(diào)用Communicator::destroy結(jié)束Ice run time。
		//destroy 會(huì)等待任何還在運(yùn)行的操作調(diào)用完成。
		//此外, destroy 還會(huì)確保任何還未完成的線程都得以匯合(joined),
		//并收回一些操作系統(tǒng)資源,比如文件描述符和內(nèi)存。
		//決不要讓你的main 函數(shù)不調(diào)用destroy 就終止,
		//否則,后果無法想象。
			ic->destroy();

		} catch (const Ice::Exception& e) {
			cerr << e << endl;
			status = 1;
		}
	}
	return status;
}

注意,盡管以上的代碼不算少,但它們對(duì)所有的服務(wù)器都是一樣的。你可以把這些代碼放在一個(gè)輔助類里,然后就無需再為它費(fèi)心了(Ice 提供了這樣的輔助類,叫作Ice::Application,參見 10.3.1 節(jié)) 。就實(shí)際的應(yīng)用代碼而言,服務(wù)器只有幾行代碼:六行代碼定義PrinterI 類,再加上三2 行代碼實(shí)例化一個(gè)PrinterI 對(duì)象,并向?qū)ο筮m配器注冊它。

讀客戶端代碼

文件client.cpp. 

#include <Ice/Ice.h>
#include "..\print.h"
using namespace std;
using namespace Demo;
int main(int argc, char* argv[])
{
	int status = 0;
	Ice::CommunicatorPtr ic;
	try {
		ic = Ice::initialize(argc, argv);

		//stringToProxy 返回的代理(Proxy)類型是Ice::ObjectPrx,
		//這種類型位于接口和類的繼承樹的根部(接口的基類)。
		 Ice::ObjectPrx base 
		=ic->stringToProxy(	"SimplePrinter:default -p 10000");

		//但要實(shí)際要與我們的打印機(jī)交談,
		//我們需要的是Printer 接口、不是Object 接口的代理。
		//為此,需要調(diào)用PrinterPrx::checkedCast 進(jìn)行向下轉(zhuǎn)換(向下轉(zhuǎn)型)。
		//這個(gè)方法會(huì)發(fā)送一條消息給服務(wù)器,
		//詢問“這是Printer 接口的代理嗎?”
		//如果回答“是”,就會(huì)返回Printer 的一個(gè)代理;
		//如果代理代表的是其他類型的接口,返回一個(gè)空代理
		PrinterPrx printer = PrinterPrx::checkedCast(base);
		
		//測試向下轉(zhuǎn)型是否成功,若不成功,就拋出出錯(cuò)消息并終止客戶。
		if (!printer) 	throw "Invalid proxy";

		//現(xiàn)在,我們在我們的地址空間里有了一個(gè)激活的代理,
		//可以調(diào)用printString 方法,
		//把享譽(yù)已久的 "Hello World!" 串傳給它。
		//服務(wù)器會(huì)在它的終端上打印這個(gè)串。
		printer->printString("Hello World!");
	}
	catch (const Ice::Exception& ex) {
		cerr << ex << endl;
		status = 1;
	} catch (const char* msg) {
		cerr << msg << endl;
		status = 1;
	}
	if (ic)
		ic->destroy();
	return status;
}

如果出現(xiàn)任何錯(cuò)誤,客戶會(huì)打印一條出錯(cuò)消息。例如,如果我們沒有先啟動(dòng)服務(wù)器就運(yùn)行客戶,我們會(huì)得到:

Network.cpp:471: Ice::ConnectFailedException:
connect failed: Connection refused

(由于windows下的命令行窗口在出錯(cuò)后會(huì)一閃就消失,不過我們可以在client.cpp的main函數(shù)的return status;之前加上system("PAUSE");然后再在VS2003.net中把client設(shè)置為啟動(dòng)項(xiàng)目,重新編譯,運(yùn)行。OK,可以看到結(jié)果了。)

posted on 2005-12-13 11:58 牽牛散步 閱讀(3219) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ICE學(xué)習(xí)資料
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲美女av电影| 久久亚裔精品欧美| 欧美三日本三级三级在线播放| 欧美一级淫片播放口| 一本大道av伊人久久综合| 免费国产一区二区| 欧美高清在线视频| 美国三级日本三级久久99| 麻豆成人在线| 欧美激情成人在线| 欧美aⅴ99久久黑人专区| 亚洲成在人线av| 久久五月婷婷丁香社区| 免费看成人av| 日韩午夜激情av| 亚洲午夜伦理| 久久久一本精品99久久精品66| 久久精品国产一区二区三区免费看| 久久九九热免费视频| 欧美激情片在线观看| 欧美一区二区三区另类| 欧美一区网站| 免费观看在线综合| 国产精品极品美女粉嫩高清在线| 国产精品欧美激情| 狠狠久久五月精品中文字幕| 99re热精品| 久久久精品国产一区二区三区| 欧美国产一区二区三区激情无套| 亚洲免费高清视频| 免费在线观看一区二区| 欧美制服丝袜| 欧美色精品天天在线观看视频 | 中文国产一区| 久久久久久久综合日本| 欧美日韩18| 精品99视频| 99视频精品免费观看| 亚洲国产精品一区二区久 | 在线观看欧美激情| 亚洲免费电影在线| 欧美一级播放| 99精品国产高清一区二区| 久久国产精品久久久久久电车 | 亚洲日本视频| 黑丝一区二区| 亚洲天堂免费观看| 欧美承认网站| 欧美在线综合视频| 亚洲人成小说网站色在线| 欧美与欧洲交xxxx免费观看| 欧美日韩精品免费观看视一区二区 | 欧美成人精品一区二区| 亚洲精品视频免费| 久久久精品动漫| 国产毛片久久| 亚洲欧美www| 亚洲国产精品成人va在线观看| 亚洲字幕一区二区| 欧美日韩www| 亚洲黑丝在线| 免费欧美在线| 欧美一区二区三区婷婷月色| 一区二区久久| 91久久精品www人人做人人爽| 在线亚洲一区观看| 国产精品白丝av嫩草影院| 亚洲激情第一页| 久久综合伊人77777尤物| 久久成人在线| 99视频精品免费观看| 亚洲国产小视频| 欧美女同视频| 亚洲一区二区三区在线观看视频| 99v久久综合狠狠综合久久| 欧美日韩一区二区三区四区在线观看 | 欧美成人嫩草网站| 在线观看欧美视频| 免费看黄裸体一级大秀欧美| 免费久久99精品国产自在现线| 国产日本亚洲高清| 国产情侣久久| 欧美一区激情| 亚洲天堂网在线观看| 欧美色偷偷大香| 在线亚洲精品| 午夜天堂精品久久久久| 亚洲国产精品第一区二区三区| 久久久777| 欧美一区二区三区在线看| 国产欧美一区二区精品性| 好男人免费精品视频| 国产一区二区三区久久精品| 久久精品91| 亚洲欧美电影院| 国产伦精品一区二区| 久久国产欧美精品| 久久精品论坛| 在线日韩视频| 欧美激情一区在线| 欧美日韩一卡| 亚洲欧美视频一区| 午夜精品区一区二区三| 9国产精品视频| 欧美性一区二区| 香蕉久久a毛片| 久久久福利视频| 亚洲天堂免费观看| 欧美14一18处毛片| 久久精品午夜| 欧美三级欧美一级| 欧美1区2区3区| 国产伦精品一区二区三区免费迷 | 亚洲国产激情| 国产亚洲a∨片在线观看| 亚洲欧洲精品一区二区三区| 国产日韩在线播放| 亚洲免费观看高清在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲一区二区视频| 欧美日韩激情网| 香蕉av777xxx色综合一区| 久久久久久久综合日本| 国产精品欧美久久| 男人的天堂亚洲| 国产精品视频午夜| 日韩视频亚洲视频| 亚洲啪啪91| 欧美在线观看一区二区| 美女视频一区免费观看| 欧美一级理论片| 欧美乱妇高清无乱码| 久久精品国产99精品国产亚洲性色| 欧美激情久久久久| 另类国产ts人妖高潮视频| 一区二区三区欧美激情| 国产亚洲毛片| 欧美色欧美亚洲高清在线视频| 亚洲黄色尤物视频| 亚洲国产一区二区三区青草影视| 韩日在线一区| 亚洲国产精品va在看黑人| 在线观看欧美黄色| 亚洲影视在线播放| 一区二区三区你懂的| 欧美福利网址| 亚洲欧洲中文日韩久久av乱码| 亚洲国产精品一区二区久| 麻豆av一区二区三区久久| 欧美大片在线观看| 亚洲精品乱码久久久久久蜜桃麻豆 | 91久久精品国产91久久| 久热精品在线视频| 一区二区在线观看视频| 久久久久成人网| 免费欧美高清视频| 亚洲乱码国产乱码精品精| 欧美日产在线观看| 亚洲主播在线播放| 久久久久久高潮国产精品视| 日韩亚洲欧美成人| 国产精品theporn| 一本久道久久综合狠狠爱| 亚洲欧美日韩国产成人精品影院| 国产精品裸体一区二区三区| 亚洲欧美资源在线| 毛片一区二区| 一本久道久久综合狠狠爱| 国产精品成人久久久久| 欧美伊人久久| 亚洲国产精品久久久久婷婷884| 99热在线精品观看| 国产伦精品免费视频| 久久性色av| 亚洲乱码精品一二三四区日韩在线| 欧美日韩999| 欧美一区二区高清| 欧美激情成人在线视频| 亚洲欧美日韩一区二区三区在线| 久久国产黑丝| 亚洲国产欧美一区二区三区久久| 亚洲综合电影一区二区三区| 国产精品久久综合| 久久国产精品72免费观看| 91久久精品日日躁夜夜躁国产| 午夜视频在线观看一区二区| 欧美一区二区三区日韩视频| 亚洲激情社区| 国产色综合天天综合网| 欧美精品在线视频| 久久国产视频网| 亚洲调教视频在线观看| 亚洲第一页在线| 久久久久综合网| 亚洲欧美日韩在线综合| 亚洲日本理论电影| 国内精品久久久久久久影视蜜臀 | 亚洲男人的天堂在线| 亚洲高清资源综合久久精品| 国产精品一区二区三区久久|