终于有了间茅草棚

——我走时,会否有随风飘散的痕迹?

外面的风好大,雨也淅淅沥沥的。

世间种种的诱惑不惊不扰我清梦,山高路远不绝我追踪你绝美的笑容,登高一呼时才懂始终在为你心痛,俯首对花影摇动都是东风在捉弄

世间种种的迷惑都是因你而猜错,水光月光又交融描述这朗朗的夜空,生死到头的相从似狂花落叶般从容,当一切泯灭如梦就在远山被绝
随笔 - 42, 文章 - 2, 评论 - 269, 引用 - 3

导航

<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

留言簿(10)

随笔档案

文章档案

收藏夹

其它的我

友情连接

网页连接

搜索

最新评论

  • 1. re: 陈刚
  • 中间件主要的好处在于便于整合,就像一个接口规范和标准。像游戏开发中3D图形技术有两套,有的游戏直接基于D3D或OenGL开发,现在更多的是基于一些图形引擎,像Ogre,Irrlicht等,在这些图形引擎下面去和具体的图形API打交道,从这个意义上来说Ogre和Irrlicht拥有一定的中间件的涵义(这些图形引擎不只是中间层,还包含有场景管理、渲染逻辑等更多内容)。加了这样一层后,当支持新的D3D10和D3D11时,中间层作出修改,原应用不需要修改就可运行,还有移植到支持OpenGLES的设备时,也是可行的。
  • --清风雨
  • 2. re: linux常见开发问题,.JPEG parameter struct mismatch
  • 你说的3.JPEG parameter struct mismatch没看明白,我现在也遇到了同样的问题,
    ”编译libjpeg的make文件里定位输出生成jpeg的地方“指的是哪啊,
    “打印出相关参数”也不明白
    “前台运行同样的./configure”什么意思?
    帮帮我了,谢谢!我邮箱litao_hao@16.com   qq;40362095
  • --haolitao
  • 3. re: linux移植建议
  • 这个学习了
  • --陈刚
  • 4. re: 软件开发模式猜测
  • 脚本在其可配置性、可扩展性上性能应该是已经超越了中间件技术。

    中间件在对其扩展、更新、配置时不知是否能做到依赖它的程序不中断运行呢
  • --陈刚
  • 5. re: 软件开发模式猜测
  • 对 “中间件模式” 还真不太了解。 

    不知 “中间件模式” 是否会影响运行、调试以及维护成本,以及如何能抽象出中间层?
  • --陈刚
  • 6. re: void *几用
  • class Sample
    {
    public:
        void draw( void *g );
    };

    我个人其实并不太认同这种做法,虽然实现了抽象但会加大维护代价
  • --陈刚
  • 7. re: 用自己的话浅谈封装
  • 封装也是一个不断完善的过程,当然再经过一段时间后随着技术的进步思想的成熟,也会推翻重来。
  • --陈刚
  • 8. re: linux常见开发问题
  • xargs不错,蛮有用的。
  • --hATEmATH的网上田园
  • 9. re: 关于“元编程”的浅思考
  • --免费打工仔
  • 10. re: 关于质数(素数)的算法

  • 是AKS方法。
    http://mathworld.wolfram.com/AKSPrimalityTest.html


  • --perry
  • 11. re: 关于质数(素数)的算法
  • 为了在数字比较小时计算得快些,可以应用一些初等数论的结论:

    1]
    仅计算6n+1和6n+5(n=1,2,3,...)形式的数。易知6n+2和6n+4是2的倍数,6n+3是3的倍数。因为2和3的倍数最多。
    2]
    根据“合数的最大的素因数都不大于它的平方根”定理,每次分解仅算到被分解的平方根为止即可。
    证明(一般的证明都不完整):
    设N=P*Q,P和Q是N的不少于1个素因数的乘积(指出这点很重要)。反证法可证P和Q都小于或等于N的平方根(否则P*Q>N)。等号当且仅当P=Q=N的平方根时成立(这时N是一个素数的平方)。

    1]可减少2/3的计算量,2]可再减少1/2的计算量。即为原计算量的1/6。

    几百位数位的数,建议采用ASK方法。





  • --perry
  • 12. re: 关于质数(素数)的算法

  • 素因数分解是一个NP问题。
  • --perry
  • 13. re: 关于质数(素数)的算法
  • 1121=19*59
  • --李圆欢
  • 14. re: void *几用
  • 方法都不错
  • --员工生日礼物
  • 15. re: void *几用
  • to oshj:
    最近才悟道这个用法,没想到你都用了很多了。

    to brent:
    不是为了玩才玩,这里每种用法在特定的情况下,都有他相应的好处。不过,我是做为自己记录的,指不定什么时候就忘记了,还可以这么用。
    1. 可以使得头文件简单,而且出于实现保密的需要,还是很有用处的。
    2. 很多时候对象本身应该简洁,但往往应对不同的需要,通常需要数据对应。举个例子,比如玩家在哪个房间,在哪个房间最好不要直接记在玩家身上,用数据注入的方式,能够很快的获得该信息。
    3. 因为是做为库暴露头文件的,使用者并不关心void *的实际意义,而且能够加快编译速度。真正要关心时,就Graphics.h这个头文件是不够的,通常会需要了解整底层个实现,才能较好的扩充。
  • --清风雨

阅读排行榜

评论排行榜

贴一个头文件,恳请大家意见和想法

一个自己用于处理基本网络操作的头文件。希望大家能多提自己的想法和意见。谢谢!(内容其实很少,主要是注释比较多,所以,看起来比较长。)


1.数据类型
 typedef signed char         S8;      /// signed char (8-bit integer)
 typedef unsigned char       U8;      /// unsigned char (8-bit integer)

 typedef signed short        S16;     /// signed 16-bit short integer
 typedef unsigned short      U16;     /// unsigned 16-bit short integer

 typedef signed int          S32;     /// signed 32-bit integer
 typedef unsigned int        U32;     /// unsigned 32-bit integer

// typedef long long   S64; /// signed 64-bit integer
// typedef unsigned long long U64; /// unsigned 64-bit integer

 typedef float               F32;    /// 32-bit float
 typedef double              F64;    /// 64-bit float

2.通信的数据
/**
 * 网络数据包
 * 提供打包、解包网络数据的接口
 */
class netPacket
{
public:
 /**
  * 生成临时数据包
  */
 netPacket( void );
 /**
  * 生成数据包
  * @para stamp 网络邮标
  */
 explicit netPacket( U8 stamp );

 ~netPacket( void );

 /**
  * 生成数据包
  * @para packet 用以生成新包的旧数据
  */
 netPacket( const netPacket &packet );

 netPacket &operator=( const netPacket &packet );

 /**
  * 打包数据块
  * @return 无
  * @para data 数据块
  * @para bytes 数据块大小
  */
 void pack( const void *data,U32 bytes );

 /**
  * 解包数据块
  * @return 解包后的数据
  * @para data 解包后的数据
  * @para bytes 数据块大小
  */
 void *unpack( void *data,U32 bytes );

 /**
  * 打包基本数据
  * @return 无
  * @para data 数据
  */
 void pack( S8 data );
 void pack( U8 data );
 void pack( S16 data );
 void pack( U16 data );
 void pack( S32 data );
 void pack( U32 data );
 void pack( F32 data );
 void pack( F64 data );
 void pack( const char *data );

 /**
  * 解包基本数据
  * @return 数据
  * @para data 解得的数据
  */
 S8  unpack( S8 &data );
 U8  unpack( U8 &data );
 S16 unpack( S16 &data );
 U16 unpack( U16 &data );
 S32 unpack( S32 &data );
 U32 unpack( U32 &data );
 F32 unpack( F32 &data );
 F64 unpack( F64 &data );
 char *unpack( char *data );

 /**
  * 打包数组数据
  * @return 无
  * @para arr 数组
  * @para size 数据组大小
  */
 void pack( const S8 arr[],U32 size );
 void pack( const U8 arr[],U32 size );
 void pack( const S16 arr[],U32 size );
 void pack( const U16 arr[],U32 size );
 void pack( const S32 arr[],U32 size );
 void pack( const U32 arr[],U32 size );
 void pack( const F32 arr[],U32 size );
 void pack( const F64 arr[],U32 size );

 /**
  * 解包数组数据
  * @return 数组数据块
  * @para buf 解出的数组
  * @para size 数组大小
  */
 S8  *unpack( S8 buf[],U32 size );
 U8  *unpack( U8 buf[],U32 size );
 S16 *unpack( S16 buf[],U32 size );
 U16 *unpack( U16 buf[],U32 size );
 S32 *unpack( S32 buf[],U32 size );
 U32 *unpack( U32 buf[],U32 size );
 F32 *unpack( F32 buf[],U32 size );
 F64 *unpack( F64 buf[],U32 size );

 /**
  * 数据包的大小
  * @return 字节数
  */
 U32 size( void ) const;

 /**
  * 获取数据包数据,存入指定数据块区
  * @return 获得的数据块
  * @para buf 数据块
  * @para size 数据的大小
  * @para off 取数据的偏移
  */
 char *datas( char buf[],U32 size,U32 off = 0 ) const;

 /**
  * 数据包的网络邮标
  * @return 邮标
  */
 U8 stamp( void ) const;

private:
 class netPacketImpl;
 netPacketImpl *m_Impl;
};

3.网络处理
/**
 * 网络办公室
 * 提供网络相关功能的接口:网络包发送、接收
 */
class netOffice
{
public:
 /**
  * 连接到指定IP主机的网络通道
  * @return 无
  * @para ip 主机的IP地址
  * @para port 主机的收听端口
  */
 void connect( U32 ip,U16 port );

 /**
  * 连接建立通道
  * @return 连接完毕否
  * @para channel 建立的通道
  * @para closed 通道是否已关闭
  */
 bool connected( U32 &channel,bool &closed );

 /**
  * 在指定端口开始收听
  * @return 实际的端口
  * @para port 收听端口
  */
 U16 listen( U16 port );

 /**
  * 接受建立的通道
  * @return 建立成功否
  * @para port 服务器收听端口
  * @para channel 建立的通道
  */
 bool accepted( U16 port,U32 &channel );

 /**
  * 关闭通道
  * @return 无
  * @para channel 要关闭的通道
  */
 void close( U32 channel );

 /**
  * 已关闭的通道
  * @return 有已关闭的没
  * @ channel 已关闭的通道
  */
 bool closed( U32 &channel );

 /**
  * 发送网络包给指定网络组
  * @return 无
  * @para channel 送给哪个通道
  * @para packet 网络包
  * @para group 网络组
  */
 void post( U32 channel,U16 group,const netPacket &packet );

 /**
  * 接收网络包
  * @return 是否有网络包
  * @para channel 取哪个通道的
  * @para group 网络组
  * @para packet 接收的网络包
  */
 bool fetch( U32 channel,U16 group,netPacket &packet );

 /**
  * 通道对应的远程IP地址
  * @return IP地址
  * @para channel 哪个通道的
  */
 U32 remoteIP( U32 channel );

 /**
  * 申请网络办公室
  * @return 办公室实例
  */
 static netOffice &instance( void );

 /**
  * 转换整数ip为字符串形式
  * @return ip字符串
  * @para 整数ip
  */
 static const char *ip_str( U32 ip );
 /**
  * 转换字符串ip为整数形式
  * @return 整数ip
  * @para ip字符串
  */
 static U32 ip_int( const char * ip );

private:
 netOffice( void );
 ~netOffice( void );

 class netImpl;
 netImpl *m_Impl;
};

posted on 2005-09-25 21:48 终于有了间茅草棚 阅读(4959) 评论(16)  编辑 收藏

评论

# re: 贴一个头文件,恳请大家意见和想法

路过,看出来注释回头是要做文档用的。 :P
2005-09-26 08:13 | flyingleaf

# re: 看出来注释回头是要做文档用的

我明白是说我太懒惰,没有说明是干什么的。

有什么建议就直接说好了,怎么想怎么看就怎么说。

就是把网络编程常用的,非特殊通用的部分一起拿从出来,这样,可以减少编写网络程序的负责度。再具体,就只能是解说这个头文件了,意义不大。

主要还是想看看各位有没有什么修改建议。各方面的都行:命名也包括。
2005-09-26 10:07 | 清风雨

# re: 贴一个头文件,恳请大家意见和想法

应该是有个图比较好。懒惰了。
有兴趣网络编程的,就有劳麻烦一下了。愿意的话,就把自己的想法写一下,包括需求也好啊!
2005-09-26 10:10 | 清风雨

# re: 贴一个头文件,恳请大家意见和想法

鼓励一下!
不过你这个封装的东西没有多少实用价值啊.
2005-09-26 13:00 | huangrg

# re: 没有多少实用价值

呵呵,这个是意见之一!^_^ —— 非常感谢

欢迎继续!
2005-09-26 13:20 | 清风雨

# re: 贴一个头文件,恳请大家意见和想法

偶不敢有意见,呵呵。不过想知道你怎么压缩的包,如何解压的?用的什么算法〉?
:P
2005-09-26 16:31 | flyingleaf

# re:不过想知道

先谢谢好意!

还没有用压缩算法(暂时未遇上带宽瓶颈,而且压缩头记录本身有开销,字符串做了一下处理,别的没有);内部实现上,看个人偏向了,因为是完全自己的外部接口,所以内部用IOCP也可以,用别的也行。(因为一直觉得IOCP可以超越,所以,自己没用,不过确实不如IOCP,有时间了,可能会改用IOCP);至于UDP的考虑,暂时不打算(TNL这个UDP,个人觉得很糟糕)。

很欢迎你的压缩解压算法!:P
2005-09-26 17:13 | 清风雨

# re: 贴一个头文件,恳请大家意见和想法

高科技
2005-09-26 17:51 | gaoqing000

# re: 贴一个头文件,恳请大家意见和想法

pack等函数如果返回*this就方便了.
例如我可以 netPacket p;
p.pack(1).pack(2).pack(false).
2005-09-26 19:27 | ilovevc

# re: ilovevc

这个说法好!
2005-09-26 19:44 | 清风雨

# re: 贴一个头文件,恳请大家意见和想法

pack和unpack内会使缓冲区指针自动移动吗?不会交给上层来作的吧?
2005-10-17 12:56 | alick

# re: 贴一个头文件,恳请大家意见和想法

没明白你的意思。我估计的话,我的回答是内部做了。——个人很反对给上层做。
2005-10-18 19:37 | 清风雨

# re: ilovevc

高,有想法。

有也写过类似的东西,不过觉得不实用.
2005-11-12 12:19 | 乐言

# re: 乐言

既然没有保密意义,不妨把头文件贴出来,学习学习。cpp暂时,个人就不需要了,代码多了,懒得看,烦。
2005-11-12 21:34 | 清风雨

# re: 贴一个头文件,恳请大家意见和想法

路过,随便扯几句:)))

类型定义那里,起码应该针对不同平台定义几组不同的类型定义吧,64位平台下你也敢这么用??

打包这个类,其实就是一个读写缓冲区的管理,感觉std::stringstream都能作到,而且使用更方便,可配接性更好

连接管理这个类有点不明白,为什么做成单件呢?难道只管理一个连接?而且,connect,accept等方法都放到一个类里面,职责不明确,这个是最大的问题

2006-09-03 12:58 | 路过

# re: 路过

1. 是的。如果考虑多平台,上面的类型定义肯定会根据平台设置的。抽象为自己的定义,就是为了方便和做这件事。
2.关于stl,我一般是不会在头文件里使用的。如果是作为应用层,当然无所谓的。因为最后想把他们抽象为一个库,而且使用上也不麻烦啊pack和unpack就可以了啊,而且比较直观。
3.职责,要看职责怎么划分的。我本意就是想统一,所有的网络处理都通过它。—— 其实也是三种模式的组合:组合、代理、门面。

看到你的说法很高兴!很好的建议!
2006-09-22 10:02 | 清风雨
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]