Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
Haskell 为什么';这个TCP服务器不能工作吗?_Haskell - Fatal编程技术网

Haskell 为什么';这个TCP服务器不能工作吗?

Haskell 为什么';这个TCP服务器不能工作吗?,haskell,Haskell,我编写了这个简单的tcp服务器: import Network import Network.Socket.ByteString main :: IO() main = do sock <- listenOn $ PortNumber 2000 contents <- recv sock 4096 print contents 在windows上: Network.Socket.recvBuf:failed(No error) 该程序有什么问题?list

我编写了这个简单的tcp服务器:

import Network
import Network.Socket.ByteString

main :: IO()
main = do
    sock <- listenOn $ PortNumber 2000
    contents <- recv sock 4096
    print contents
在windows上:

Network.Socket.recvBuf:failed(No error)

该程序有什么问题?

listenOn
只创建一个“侦听套接字”,用于“侦听”到服务器的新连接。您应该使用
accept
功能获取新客户机,如下所示:

main :: IO ()
main = do
    sock <- listenOn $ PortNumber 2000
    (client, _, _) <- accept sock
    contents <- hGetContents client
    print contents
    sClose sock
main :: IO ()
main = do
    sock <- listenOn $ PortNumber 2000
    forever $ do
        (client, _) <- accept sock
        forkIO $ do
            contents <- recv client 4096
            print contents
            sClose client
如果您想处理更多客户端,可以使用
forkIO
如下:

main :: IO ()
main = do
    sock <- listenOn $ PortNumber 2000
    (client, _, _) <- accept sock
    contents <- hGetContents client
    print contents
    sClose sock
main :: IO ()
main = do
    sock <- listenOn $ PortNumber 2000
    forever $ do
        (client, _) <- accept sock
        forkIO $ do
            contents <- recv client 4096
            print contents
            sClose client
main::IO()
main=do
短袜