【问题标题】:Using C FILE stream in C sockets programming在 C 套接字编程中使用 C FILE 流
【发布时间】:2011-05-25 04:20:44
【问题描述】:

我回来了一个关于在套接字编程中使用 C 文件流的问题。我正在阅读它并看到混合评论 - 有些人说它不可靠(即抽象泄漏?)。

有没有人了解在套接字编程中使用 C 文件流?

【问题讨论】:

  • AFAIK,这应该只适用于某些编译器/操作系统,如果有的话。
  • 谢谢西蒙妮!我应该检查它是否适用于我的目标平台......

标签: c sockets file stream abstraction


【解决方案1】:

是的。不要。

TCP 和 UDP 协议的语义太多,无法轻松映射到您常用的文件流 API。这并不是说这是不可能的,甚至是困难的,但可能会有很多很多的陷阱和边缘情况会给你带来不可预知的行为。我也无法想到任何您可能希望将套接字视为普通文件的应用程序。

在一天结束的时候,一旦你处理了绑定、监听和接受,这些都是你不能用 C 文件流做的,并将生成的文件描述符包装在文件流类型中,你要做的就是做的是使用 fread() 和 fwrite(),也许是 fgetc(),所以你不妨把它作为一个普通的文件描述符使用 recv() 和 send(),省去包装的麻烦。您可以省去处理缓冲的麻烦,但是控制缓冲可以让您根据应用程序的要求调整缓冲区,并为自己节省一些网络开销和速度。

【讨论】:

    【解决方案2】:

    这取决于您编写的应用程序类型。 FILE 流不适用于非阻塞、异步或基于 select/poll 的 IO。对于执行连接到服务器、发出一些请求和获取结果的顺序任务的命令行程序来说,这可能没有问题。它也适用于仅从 inetd 运行的服务器进程。但是,如果您的应用程序将基于事件执行任何操作,那么您就有麻烦了。如果您真的想在基于事件的应用程序中使用带有套接字的FILE 流,您可以使用线程来实现,但我怀疑这是一个好主意...

    【讨论】:

    • 谢谢 R..!我的意图是进行异步连接。但我现在可以将其缩小为顺序程序。但我正在寻找可以处理至少 80 个并发连接的东西。这些连接将不间断地发送数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多