gpt4 book ai didi

haskell - 为什么这个 TCP 服务器不工作?

转载 作者:行者123 更新时间:2023-12-02 09:16:43 28 4
gpt4 key购买 nike

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

import Network
import Network.Socket.ByteString

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

堆栈构建成功,因此我运行服务器,使用 telnet 来测试它,但出现错误:

在 Linux 上:

Network.Socket.recvBuf:invalid argument (Transport endpoint is not connected)

在 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

或者使用低级的accept函数(来自Network.Socket模块)来获取套接字:

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

如果你想处理更多客户端,你可以使用forkIO,如下所示:

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

关于haskell - 为什么这个 TCP 服务器不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46501427/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com