从Windows上的套接字读取序列失败(haskell套接字)

时间:2013-11-13 12:18:13

标签: windows sockets haskell tcp

我为某些设备编写了一个简单的TCP客户端,它消耗并生成8字节数据包(send-command-receive-result函数的代码如下)。

当我在linux上运行它时,它完美地运行,作为循环的一部分(send-recv-send-recv -...),但在Windows上它只接收来自设备的第一个消息(send-recv-send-发送-...)。数据包仍在继续 - 我可以用Wireshark清楚地看到它们 - 但是我的客户端下的东西只是忽略它们(或截断为零?)。它甚至不打印"Data was read!" - 看起来像是卡住了并被timeout函数杀死。

在此之前,我直接使用了套接字;改为HandleStream根本没有任何差别。在main中包裹withSocketsDo也没有做任何事情。

transmit :: Int -> HandleStream ByteString -> ByteString -> IO [Bytestring]
transmit delay sock packet = do
    let input = timeout delay $ sock `readBlock` 8 <* putStrLn "\nData was read!"

    sock `writeBlock` pack

    strings <- whileJust input

    return [str | Right str <- strings]

whileJust action = do
    result <- action

    case result of 
        Just a  -> (:) <$> return a <*> whileJust action
        Nothing -> return []

我做错了什么?

0 个答案:

没有答案