能力值:
( LV2,RANK:10 )
|
-
-
2 楼
写得挺好的,学习一下!
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
感谢! 正在苦恼 通信问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
额,好像很复杂的代码。。。
有没有简单的实例呀?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
不错,又多一种方法
|
能力值:
( LV7,RANK:100 )
|
-
-
6 楼
哇哦,不错哦!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
学习了。 。。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
这几天正研究这东西呢,谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
写的不错. 多谢
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
LPC相对于socket有什么优势?
LPC还有阻塞,socket可是完全支持异步的哦
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
阻塞模型结合线程写代码容易啊
|
能力值:
( LV13,RANK:220 )
|
-
-
12 楼
笑笑要开始搞精华了啊 顶
|
能力值:
( LV9,RANK:280 )
|
-
-
13 楼
进程通信与数据传递的需求,我一般就用命名管道做了;
不过LPC也挺好
|
能力值:
( LV9,RANK:280 )
|
-
-
14 楼
模块设计,如果能满足需求,那当然是越简单越好,哪里有为了防止逆向分析而故意把设计弄的负责的道理?
|
能力值:
( LV12,RANK:236 )
|
-
-
15 楼
嗯,小弟表述不当,其实不是模块设计简单的问题了啦!
你的关点也没错,软件设计不是在于复杂,而是在于设计的可扩展性、健壮性、可维护性、可伸缩性!当然这是我对于好的设计的评价标准!一个好的设计就像一个优雅的建筑设计是一样的,是符合大众的审美观的!
设计归设计,防逆向归防逆向,首先小弟描述不当,再者设计与抗逆向也没因果关系,这两个都是小弟没表述好的!
这贴子主要是开源了啦!小弟愿意与各位探讨软件设计(OOD,重构),逆向分析,安全技术(攻与防),UI也行(不要说小弟好像什么都不懂,什么都不精,主要在于你怎么看,放大扩大那么你就是精一门,缩小细化你就变成懂几门了)!当然如果你愿意指点下的话,可以联系我!
name space ChinaPower
{
enum
{
FEMALE,
MALE
}Sex;
enum
{
UGLY;
NORMAL,
BEAUTY,
}
Class Topic
{
public:
BeTalked();
}
Class People : public Topic
{
public:
BeTalkd();
Sex GetSex();
Looks GetLooks();
private:
Sex m_Sex;
Looks m_Looks;
}
Class DesignTopic : public Topic
{
public:
DesignTopic(Topic* pTopic)
{
m_pTopic = pTopic;
}
BeTalked()
{
m_pTopic->BeTalked();
AboutOOD();
AboutRefactor();
}
AboutOOD();
AboutRefactor();
private:
Topic *m_pTopic;
}
Class ReversTopic : public Topic
{
public:
ReversTopic(Topic *pTopic)
{
m_pTopic = pTopic;
}
public:
BeTalked()
{
m_pTopic->BeTalked();
AboutFuckEncrypt();
AboutFuckAsm();
}
AboutFuckEncrypt();
AboutFuckAsm();
}
Class DefendAttackTopic : public Topic
{
public:
DefendAttackTopic(Topic *pTopic)
{
m_pTopic = pTopic;
}
public:
BeTalked()
{
m_pTopic->BeTalked();
AboutDefend();
AboutAttack();
}
AboutDefend();
AboutAttack();
}
Class UiTopic : public Topic
{
public:
UiTopic(Topic *pTopic)
{
m_pTopic = pTopic;
}
public:
BeTalked()
{
m_pTopic->BeTalked();
AboutCustomDraw();
AboutDui();
}
AboutCustomDraw();
AboutDui();
}
Class SiftOut;
{
public:
BOOL ChoosePeople(People* pPeople)
{
swith (pPeople->GetSex())
{
case FEMALE:
swith (pPeople->GetLooks())
{
case UGLY:
printf("Oh My GOD,算了不要交流了啦\n");
return FALSE;
case NORMAL:
printf("Oh 可以接受了啦\n");
return TRUE;
case BEAUTY:
printf("Oh太好了,美女交流下吧\n");
return VERY TURE;
}
case MALE:
printf("哎是男人啊,交流看看是不是大牛\n");
return TRUE;
}
}
}
}
void Main()
{
People stranger;
SiftOut Siftor;
Topic *pTopic = NULL;
if (Siftor.ChoosePeople(&stranger))
{
pTopic = new DesignTopic(new ReversTopic(new DefendAttackTopic((new UiTopic(&stranger)))));
}
if (NULL != pTopic)
{
pTopic->BeTalked();
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
很感谢楼主能够开源把这么好的通信机制告诉大家~
但是楼主的这个代码有一点问题,那就是,见下图~
楼主将通讯端口封装为类的成员,那么在一对多的时候,当前的通讯端口在accept之后会被新的连接覆盖~~
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
我想了下,准备从以下两个方法中选择一个来使用楼主的开源代码(感谢万能的楼主):
1:将连接句柄从类的成员变量中分离,不再作为CXlpC的成员
因为不分离的话,会导致共享内存区多线程/多进程同步的问题,而且请求/应答容易被干扰
很容易出问题。
2:将封装的LPC方法从CXLPC中分离
******************************************************************
按照方法1试了下,不行,估计LPC只能单对单,在一次服务结束之前,不能接受下一个~这样的话,比socket就差远了……
|
能力值:
( LV12,RANK:236 )
|
-
-
18 楼
当初看很多资料(主要是毛德操的那本Windows内核情景分析),提到是1对多,类似SOCKET,其实不然,是1对1的。我认为我这种封装是符合OO设计原则的。实现1对多,其实有变通的实现方法,你可以再写一个管理类,管理类里面vector存一下,这样可以看似成这个管理类,是在1对多服务,其实是1对1,一个Server一个Client。
对于Socket就看,你怎么看这个1对多了,你listen后,然后Accept后不是也创建了一个socket么,然后这个socket与client通信。
相对于那个listen的socket来讲,就是1对多。
相对于accept创建的socket来讲,就是1对1。
所以,LPC也可以模拟实现1对多通信,自己再增加一上管理类吧!
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
牛哥的代码是无可挑剔的,万分感谢
但是后面的“相对于那个listen的socket来讲,就是1对多。”这个我试过,也不是一对多,也是一对一的。
当再次listen监听端口的时候,已经创建好的服务线程和客户端线程的通信就会挂起
所以,“相对于那个listen的socket来讲,就是1对多。”是错的。
按照你文档里面的术语:服务端的LPC线程、服务线程与客户端线程是1:1:1的。
如果这样的话,LPC比双向通信的命名管道要复杂的多,但是功能一样,可能速度占优。
------------------------------------------------------------------------------------------------
我倒,看的仓促了,误解了大牛的意思了。。。。原来这句是说socket的
|
能力值:
( LV7,RANK:100 )
|
-
-
20 楼
学习中没有发言权,希望高手们能开源一个能承受高强并发的C/S通信源码
|
能力值:
( LV3,RANK:30 )
|
-
-
21 楼
进程间通信,我也一般用命名管道了,数据量小的话,可能直接就用WM_Copy消息来整了,呵呵学习一下楼主的!
|
能力值:
( LV4,RANK:40 )
|
-
-
22 楼
好东西啊,正需要进程间通讯的东西
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
非常好的学习资料。感谢。
|
能力值:
( LV5,RANK:70 )
|
-
-
24 楼
Mark
|
|
|