0

在哪里可以找到 sendFile 函数(Network.Socket.SendFile lib)的一些实际示例。当我尝试按照官方手册进行所有操作时,出现错误:

Exception: {file path}: withFd: resource vanished (Broken pipe)

它是函数使用的一些简单的例子吗?

这里是来源:

withSocketsDo $ do                                                                                                                                              
                sock <- socket AF_INET Stream defaultProtocol                                                                                                           
                bindSocket sock (SockAddrInet 1212 0)
                sendFile sock "/some/path/to/file"
4

1 回答 1

0

这是我必须工作的一些代码。

import Network.Socket.SendFile
import Network.Socket

main = withSocketsDo $ do
    sock <- socket AF_INET Stream defaultProtocol            
    addr <- inet_addr "127.0.0.1"
    connect sock (SockAddrInet 8080 addr)
    sendFile sock "some/path/to/file"

以下是正在发生的事情以及如何使其发挥作用的说明-

  1. 您需要设置一个服务器来接受数据。您可以做的最简单的事情(仅用于测试目的)是使用 netcat。在我的 linux 机器上,我通过键入启动 n​​etcat

    数控 -l -p 8080

(“-l”告诉它监听一个连接,-p 指定端口,可以是任何你有权限绑定的东西,只要它与上面haskell程序中的端口匹配)

  1. withSocketsDo 仅用于 Windows 兼容性,但在其他环境中不会受到影响。

  2. 您需要使用 connect 而不是 bind 来连接到服务器。

  3. 编译并运行程序后,您应该会在启动 netcat 的终端中看到文件的内容(程序将停止)。如果你在没有先启动 netcat 服务器的情况下运行 haskell 程序,你会得到一个错误。

于 2013-12-02T17:56:28.513 回答