扩展C++STL制作Socket Stream

主页备案2个月了,还没成功,继续在这发点水言。

以前就有此想法,想想C++的iostream,那是多么滴方便,我感觉是比java I/O库还好用。内置缓冲机制,安全性与方便性都很优秀,那么可不可以扩展它做一个SocketStream出来,从而告别臃肿复杂的Berkly套接字呢?

我没实践过,但是答案是肯定滴,而且强人早已实现,我在此提供两个资料,其余后文都是废话,迫切找资料者可以略过。

SocketStream库: google关键字POCO。我相信你看了后会感谢我的,难得的Free C++ network library。Socket库只是冰山一角

扩展STL Stream: Standard C++ Library User Guide Volum2。

好了,以下都是废话了。

Stream的概念就是在IO与应用间加一个缓冲区,然后我们只需操作缓冲区即可完成IO操作。所以,要想制作SocketStream,我们得提供一个自定义SocketStreamBuf作缓冲,大概步骤就是:

让SocketStream继承std::ios,并且包含一个成员变量SocketStreamBuf,且它继承自std::basic_streambuf

然后对照资料实现各种虚函数,over。。。。

最后贴一个例子,可以看看POCO的socket库是多么方便:

EchoServer echoServer;
StreamSocket ss;
ss.connect(SocketAddress("localhost", echoServer.port()));
SocketStream str(ss);
str << "hello";
assert (str.good());
str.flush();
assert (str.good());
ss.shutdownSend();

char buffer[5];
str.read(buffer, sizeof(buffer));
assert (str.good());
assert (str.gcount() == 5);
assert (std::string(buffer, 5) == "hello");

ss.close();

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值