跨平台的 Socket 库:

Elminster 2002-05-16 05:39:35
最近在做一些 Socket 通信程序,因为需要在异构平台之间通信,所以有一大堆象“big endian/little endian 判断”这样繁琐的问题,而且整个系统中有多处需要使用 Socket 互相通信,实现起来让人不胜其烦。

我现在的打算是写一个类似 CSocket 的通用界面的类,把这些繁琐而且平台相关的东西都封装起来。不过我很不愿意“重复发明同样的轮子”,以前对 socket 也很不熟悉,所以求教各位,是否已经有了这样跨平台的 socket 库?或者哪位对实现这样的东西很有经验,也请不吝赐教。补充一点:我面对的应用对性能敏感。

先行谢过



...全文
1252 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Elminster 2002-05-24
  • 打赏
  • 举报
回复
大概如此吧,结贴
liuxf666 2002-05-23
  • 打赏
  • 举报
回复
建议你参照ACE,把它里面的REACTOR、ACCEPTOR/CONNECTOR、STREAM。。。几个PATTERN实现了,也就达到你的目的了,不过不要掉到ACE的代码里面去了啊 :)

To jerry921(jerry):
去看看ACE的实现,就应该知道这个正是这些类库/框架要解决的问题。

一般windows下要事件驱动,而unix是当文件一样打开,用select做超时处理,就这两点就无法写成一个类了。

这个问题很容易解决,本身就不是做成一个类嘛,只是使用了Bridge pattern,保证了一个单独的REACTOR接口,对类UNIX系统,缺省使用的是Select_Reactor,而对WIN,则是WFMO_Reactor。至于对file descriptor的处理就是更加接近实现细节了,应该是很容易的了。
Elminster 2002-05-22
  • 打赏
  • 举报
回复
To jerry921(jerry):

我知道不同平台下面的 socket 有很大区别,但正是如此跨平台的 socket 类才有价值。

To huxw:

你好,很高兴遇到一个和我想法接近的人。具体的信里再说吧。

还有哪位高手愿意给我建议?多谢了。
jerry921 2002-05-21
  • 打赏
  • 举报
回复
各个平台无法统一到一处,如windows和unix就有很多不同之处,一般windows下要事件驱动,而unix是当文件一样打开,用select做超时处理,就这两点就无法写成一个类了。要做不如就用一个预处理分成几部分就完了。但其实没太大用处。
frontpage 2002-05-21
  • 打赏
  • 举报
回复
good
huxw 2002-05-21
  • 打赏
  • 举报
回复
to elminster
我的想法和你很接近。最好是能用类似boost::thread的方法来实现一个boost::socket。ACE太大了,编译就要若干小时,我觉得不足取。至于平台间的区别,看看thread的做法,无非也是条件编译罢了。具体想法可以再联系,给我发mail吧 huxw@ns.6test.edu.cn

btw: 你常玩BG嘛?
Elminster 2002-05-17
  • 打赏
  • 举报
回复
To : Solstice(大佛)

这个可能大了一些,我更希望看到一个轻量级的库,比较薄的一层封装,可以当作工具来使,象 boost::thread 这样的。ACE 更接近一个完整的框架了,可能不一定适合我现在面对的情况。不过还是非常感谢你。

To : huangwu007(浪迹天涯)、DreamHead(大头)、hiphop(小风)

我是个懒人(^_^),这种问题一般而言总是希望找到开放的、具有工业强度的库(I love STL/Boost!),尽可能避免自己来实现。不过如果没有别的选择,我在自己实现的时候,还是非常希望能够得到你们的帮助。能够留下一个联系方式么?我的 email : wizard@sh163.net。

还有哪位高手愿意给我建议?多谢了。
hiphop 2002-05-16
  • 打赏
  • 举报
回复
就是说写一个类最好还是自己写
这样里面的东西自己才能很熟悉
用的时候也能很的上手~
dreamhead 2002-05-16
  • 打赏
  • 举报
回复
我也关注!
我在做一个socket类,没办法,不能给你。
你可以到GNU上,找找common c++,那里面也有socket的实现。
另外,socket本身是独立于平台的,你也可以借鉴一下MFC的实现。
设计一个socket类,并不是很难,我觉得关键是设计一个良好的,有弹性的。在封装的过程中,你可以学到很多东西,推荐看一下Effective C++中关于类和接口设计的部分,可以学到很多东西,希望你能把它应用于你的设计中。
huangwu007 2002-05-16
  • 打赏
  • 举报
回复
我做了一个跨平台的库,里面是有这样的socket类,不过涉及的类型就很多了,都是按照标准C++来写的,与平台有关的都是使用api来实现的,通过预编译宏来选择,目前支持windows、linux、solaris,都给你可能不行,不过你如果要自己写socket类,我可以给你点帮助

最少你还要自己写一个跨平台thread类型
然后再用socket api来实现
陈硕 2002-05-16
  • 打赏
  • 举报
回复
http://siesta.cs.wustl.edu/~schmidt/ACE.html

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧