2013-12-02 4 views
0

Где я могу найти некоторые фактические примеры функции sendFile (Network.Socket.SendFile lib). Когда я пытался сделать все официальной инструкции, я получил сообщение об ошибке:Haskell sendFile function

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" 
+8

«Носок», который вы получаете из 'bindSocket', является прослушивающим сокетом. Вам нужен клиент для подключения к нему, а затем серверу нужно «принять» клиента, а затем «*» вы можете начать отправку данных клиенту. В настоящее время вы просто сбрасываете данные в никуда, что приводит к ошибке. – kqr

ответ

1

Вот код, который я должен работать.

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. На моей коробке Линукс, я начал Netcat, набрав

    н.д. -l -p 8080

(«-l» говорит это для прослушивания соединения, -p указывает порт, который может быть что угодно у вас есть разрешение связываться с тех пор, как он соответствует порту в программе Haskell выше)

  1. withSocketsDo только необходимый для совместимости с Windows, но это не повредит в других средах.

  2. Для подключения к серверу необходимо использовать соединение вместо привязки.

  3. После того как вы скомпилировали и запустили программу, вы должны увидеть содержимое файла в терминале, который запустил netcat (и программа остановится). Если вы запустите программу haskell без первого запуска сервера netcat, вы получите сообщение об ошибке.