【问题标题】:TCPStream Class for multithreaded TCP server多线程 TCP 服务器的 TCPStream 类
【发布时间】:2011-04-21 05:13:43
【问题描述】:

我目前正在将一个小型控制台应用程序转换为 TCP 服务器/客户端应用程序。客户端将通过任何 Telnet 客户端连接到服务器,服务器将为每个 Telnet 连接复制标准控制台界面。

我开始考虑使用从 Beej 的网络编程指南中学到的技术来执行此操作 - 接受连接,然后使用 fork() 将其分离到自己的进程中。

但是,我更愿意继续使用流式 IO(原始控制台应用程序使用 cin / cout,对网络逻辑使用类似的函数会使转换过程更简单)。

我发现了隐藏在 sockets.h (http://www.gnutelephony.org/doxy/bayonne2/a00215.html) 中的 TCPStream 类

看来这个类将允许我使用带有流式 IO 的服务器。但是,我找不到使用此类的单个示例,也找不到有关如何将 fork() 与它一起使用的解释。

有什么想法吗?提前感谢您的帮助。

【问题讨论】:

    标签: c++ networking tcp iostream tcpserver


    【解决方案1】:

    我认为您将树木与森林混淆了。一个套接字类只是您整体需要做的一小部分,因此不值得关注。

    如果您的目标只是让您的项目正常运行,那么只需使用现有框架,而不是尝试从大型项目中提取单个类。 POCO 有一个 TCPServer 类,它将为您完成 90% 的工作。 QT、ACE 等也有类似的类。没有关于 POCO 的大量文档,但它们确实很好地涵盖了 TCPServer,如果这真的是你感兴趣的地方,你可以从阅读源代码中学到很多东西。

    【讨论】:

    • 感谢 POCO 的 TCPServer 类的信息。与我之前使用的其他 TCPServer 库相比,它看起来非常有用并且结构良好。我想我的问题应该更清楚——尽管我很欣赏其他选择,但我仍然想知道......如何使用这个 TCPStream 类(在 sockets.h 中)?
    • @BSchlinker - 不完全是你的要求。要么你将不得不下载并编译整个 Bayonne 项目,在你的源代码中包含适当的头文件并链接到它的库......或者拉出源代码并将其合并到你自己的中。后者并不像仅仅使用头文件那么简单;你需要相应的 cpp 文件代码加上它继承的对象的所有代码、它期望作为参数的对象、typedef、异常等。如果你问我,一个大 PITA。
    • @BSchlinker - 如果您只想知道如何进行适当的类调用,我也没有找到任何示例,因此您需要从 API 文档中解开谜题。总而言之,只是为了使用流操作符。
    • @BSchlinker - 看看cs.utexas.edu/users/lavender/courses/socket++ 上的 Sockets++ 我一直在努力记住哪个包强调了 iostream 接口并最终记住了。我认为它可能会满足您的需求并为您省去很多麻烦。
    猜你喜欢
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多