Nebula2探秘09-IpcPeer(UDP)
happykevins文
Nebula2有内置了两种IPC(进程间通讯)的解决方案:IpcServer(UDP)和IpcPeer(TCP);下面一段代码展示如何使用Nebula2的IpcPeer。
/****************************************************************************/
/*Nebula2-Tutorial09*/
/*IpcPeer-UsingUDP*/
/*author:happykevins*/
/****************************************************************************/
///----------------------------------------------------------------------------
///+必要头文件
//nebula2includes
#include"kernel/nkernelserver.h"
#include"kernel/nipcpeer.h"
///-必要头文件
///----------------------------------------------------------------------------
///----------------------------------------------------------------------------
///+链接库
#pragmacomment(lib,"wsock32.lib")
#pragmacomment(lib,"d_nkernel.lib")
///-链接库
///----------------------------------------------------------------------------
///----------------------------------------------------------------------------
///+Application
intmain(intargc,constchar**argv)
{
///创建KernelServer
nKernelServer*ks=n_new(nKernelServer);
///启动网络模块
WSADATAwsaData;
interr=WSAStartup(MAKEWORD(2,2),&wsaData);
if(err!=0){
n_printf("无法启动网络模块!");
return0;
}
///初始化两个Peer用于发送和接收数据
nIpcAddressaddr1("self",7111);
nIpcAddressaddr2("self",7222);
nIpcPeerpeer1(&addr1,nIpcPeer::CanSend);
nIpcPeerpeer2(&addr2,nIpcPeer::CanReceive);
///测试发送5条信息
for(inti=1;i<=5;i++)
{
nIpcBuffersend(256);
nIpcBufferrecv(256);
nIpcAddressfrom;
///发送信息
send.SetString("HelloPeer2!I'mPeer1!");
peer1.SendTo(addr2,send);
///Sleep一段时间确保收到消息
n_sleep(3.0);
///接收消息
if(peer2.ReceiveFrom(recv,from))
{
if(recv.IsValidString())
{
n_printf("]ReceiveaMessagefrom%s:%d ",from.GetHostName(),from.GetPortNum());
n_printf("]MessageContent:%s ",recv.GetString());
}
}
}
///关闭网络模块
WSACleanup();
n_printf("按任意键退出...");
///销毁KernelServer
n_delete(ks);
getchar();
return0;
}
///-Application
///----------------------------------------------------------------------------
/*Nebula2-Tutorial09*/
/*IpcPeer-UsingUDP*/
/*author:happykevins*/
/****************************************************************************/
///----------------------------------------------------------------------------
///+必要头文件
//nebula2includes
#include"kernel/nkernelserver.h"
#include"kernel/nipcpeer.h"
///-必要头文件
///----------------------------------------------------------------------------
///----------------------------------------------------------------------------
///+链接库
#pragmacomment(lib,"wsock32.lib")
#pragmacomment(lib,"d_nkernel.lib")
///-链接库
///----------------------------------------------------------------------------
///----------------------------------------------------------------------------
///+Application
intmain(intargc,constchar**argv)
{
///创建KernelServer
nKernelServer*ks=n_new(nKernelServer);
///启动网络模块
WSADATAwsaData;
interr=WSAStartup(MAKEWORD(2,2),&wsaData);
if(err!=0){
n_printf("无法启动网络模块!");
return0;
}
///初始化两个Peer用于发送和接收数据
nIpcAddressaddr1("self",7111);
nIpcAddressaddr2("self",7222);
nIpcPeerpeer1(&addr1,nIpcPeer::CanSend);
nIpcPeerpeer2(&addr2,nIpcPeer::CanReceive);
///测试发送5条信息
for(inti=1;i<=5;i++)
{
nIpcBuffersend(256);
nIpcBufferrecv(256);
nIpcAddressfrom;
///发送信息
send.SetString("HelloPeer2!I'mPeer1!");
peer1.SendTo(addr2,send);
///Sleep一段时间确保收到消息
n_sleep(3.0);
///接收消息
if(peer2.ReceiveFrom(recv,from))
{
if(recv.IsValidString())
{
n_printf("]ReceiveaMessagefrom%s:%d ",from.GetHostName(),from.GetPortNum());
n_printf("]MessageContent:%s ",recv.GetString());
}
}
}
///关闭网络模块
WSACleanup();
n_printf("按任意键退出...");
///销毁KernelServer
n_delete(ks);
getchar();
return0;
}
///-Application
///----------------------------------------------------------------------------