-
前面的几篇博客反响还不错,但还有一个硬伤,“说了这么多理论,能不能实践?”讲类似概念的文章不算多,但也不少了,但我一直没能从中收获太多的东西,反而更是云里雾里的糊涂了。估计这主要是两方面的原因造成的:我智商低,却爱较真! 你说得得天花乱坠,我只信一点,眼见为实,“是骡子是马,牵出来溜溜?”
2015/12/9 |
软件开发 |
评论:0
-
前面写了这么多,很大程度上就是为了这一章做准备。面向对象或者领域驱动,最重要的一点就是要忘记数据库!我花了很长很长的时间,才理解了这一点,从而真正的迈向一个崭新的天地;而后,我又花了很长很长的时间,才勉强做到这一点;我希望,有一天,这将不再是一个问题,我不需要考虑这一点…… 为什么业务层这么薄 三层架构流行起来之后,我们很清楚的知道UI层负责页面交互并调用下一层,也知道
2015/12/4 |
软件开发 |
评论:0
-
同样的,我们将UDP版的doEcho()也设计成返回bool:true表示循环继续;false表示关闭客户端。 当echo_message为“空”的时候,即输入直接回车,是一个"",用C风格来说,即时'\0',从C++来说,是const char[1],其C++风格的长度echo_message.size()为0,这时候就会发送一个“0长度”的UDP数据包。
2015/11/30 |
软件开发 |
评论:0
-
与TCP版的Echo Server类似,我们从Server Socket类中派生出Echo Server类。 我们依然让handEcho()返回一个bool,true表示客户端“正常”离开(这里没用“断开”这个词是因为UDP是无连接的;另外,我们这里用recvfrom()返回小于0来表示客户端其实是“非正常”的离开了,比如连接被重置。
2015/11/30 |
软件开发 |
评论:0
-
recv()和recvfrom()的第4个参数可以调整函数行为。 因为UDP是按数据包接收的,我们在接收之前并不知道这个数据包有多大。一个策略是,我们准备足够大的应用程序缓存以免出错,但是这个“足够大”的概念是建立在我们对传送的数据事先有了解的情况下,比如是我们自己设计服务器端和客户端并且制定应用层协议
2015/11/30 |
软件开发 |
评论:0