Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Windows上的套接字连续读取失败(haskell套接字)_Windows_Sockets_Haskell_Tcp - Fatal编程技术网

从Windows上的套接字连续读取失败(haskell套接字)

从Windows上的套接字连续读取失败(haskell套接字),windows,sockets,haskell,tcp,Windows,Sockets,Haskell,Tcp,我为一些设备编写了一个简单的TCP客户端,它使用并生成8字节的数据包(发送命令接收结果函数的代码如下) 当我在linux上运行它时,它工作得很好,是循环的一部分(send-recv-send-recv-…),但在windows上它只接收来自设备的第一条消息(send-recv-send-…)。数据包仍然在运行——我可以用Wireshark清楚地看到它们——但我的客户端下的某些东西只是忽略了它们(或者截断为零?)。它甚至不打印“数据已读取!”-看起来像是读取阻塞并被超时函数杀死 在此之前,我直接使

我为一些设备编写了一个简单的TCP客户端,它使用并生成8字节的数据包(发送命令接收结果函数的代码如下)

当我在linux上运行它时,它工作得很好,是循环的一部分(send-recv-send-recv-…),但在windows上它只接收来自设备的第一条消息(send-recv-send-…)。数据包仍然在运行——我可以用Wireshark清楚地看到它们——但我的客户端下的某些东西只是忽略了它们(或者截断为零?)。它甚至不打印
“数据已读取!”
-看起来像是读取阻塞并被
超时
函数杀死

在此之前,我直接使用插座;更改为
HandleStream
yell没有任何区别。用SocketSDO在
中包装
main
也没有任何作用

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 []
transmit::Int->handleStreamByTestRing->ByteString->IO[ByteString]
传输延迟sock数据包=do

让输入=超时延迟$sock`readBlock`8我现在正在使用Network.TCP。