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