1. 工程结构
2. 详细代码
Printer.ice
module Demo {
interface Printer {
void printString(string s);
};
};
Server.cpp
#include <Ice/Ice.h>
#include "Printer.h"
using namespace std;
using namespace Demo;
class PrinterI:public Printer {
public:
virtual void printString(const string &s, const Ice::Current&);
};
void PrinterI::printString(const string &s, const Ice::Current&)
{
cout << s << endl;
}
int main(int argc, char** argv)
{
int status = 0;
Ice::CommunicatorPtr ic;
try {
ic = Ice::initialize(argc, argv);
Ice::ObjectAdapterPtr adapter = \
ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter",\
"tcp -p 10000");
Ice::ObjectPtr object = new PrinterI;
adapter->add(object, ic->stringToIdentity("SimplePrinter"));
adapter->activate();
ic->waitForShutdown();
} catch(const Ice::Exception &e) {
cerr << e << endl;
status = 1;
} catch(const char* msg) {
cerr << msg << endl;
status = 1;
}
if (!ic)
return 1;
ic->destroy();
}
Client.cpp
#include <Ice/Ice.h>
#include "Printer.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);
Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:tcp -p 10000");
PrinterPrx printer = PrinterPrx::checkedCast(base);
if (!printer)
throw "Invalid proxy";
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;
}
Makefile
INCLUDES= -I./
LDFLAGS= -lIce -lIceUtil
OBJS= Server.o Client.o Printer.o
Test : Server Client
Client: Client.o Printer.o
g++ $(LDFLAGS) Client.o Printer.o -o Client
Server: Server.o Printer.o
g++ $(LDFLAGS) Server.o Printer.o -o Server
$(OBJS): Server.cpp Client.cpp Printer.cpp
g++ $(INCLUDES) Server.cpp Client.cpp Printer.cpp -c
.PHONY : clean Test
clean :
rm -rf *.o Server Client