Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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

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 为什么nmap显示我的tcp服务器没有侦听它应该侦听的端口?_Windows_Sockets_Haskell - Fatal编程技术网

Windows 为什么nmap显示我的tcp服务器没有侦听它应该侦听的端口?

Windows 为什么nmap显示我的tcp服务器没有侦听它应该侦听的端口?,windows,sockets,haskell,Windows,Sockets,Haskell,我打算建立在这段代码的基础上,发现 但是,我注意到我可以在本地主机上远程登录到该服务器。无法从另一台计算机中删除。我做了一个快速的nmap扫描,它报告在我选择的端口上没有任何内容正在侦听。 为了排除故障,我关闭了防火墙,因此排除了这一可能的问题 haskell windows程序员提供的线索将不胜感激 我通常和你一起去 netstat-an | grep LISTEN 如果您看到列出的端口,则表示有人正在侦听。我一时记不起lsof命令是用于sockets的,谷歌并没有放弃商品。 netst

我打算建立在这段代码的基础上,发现 但是,我注意到我可以在本地主机上远程登录到该服务器。无法从另一台计算机中删除。我做了一个快速的nmap扫描,它报告在我选择的端口上没有任何内容正在侦听。 为了排除故障,我关闭了防火墙,因此排除了这一可能的问题

haskell windows程序员提供的线索将不胜感激

我通常和你一起去


netstat-an | grep LISTEN

如果您看到列出的端口,则表示有人正在侦听。我一时记不起lsof命令是用于sockets的,谷歌并没有放弃商品。


netstat-an | grep LISTEN


如果您看到列出的端口,则表示有人正在侦听。我一时记不起lsof命令是用于sockets的,Google并没有放弃它。

看来socket绑定到了localhost(127.0.0.1),这就是为什么你不能从其他机器连接它,而它只能从本地机器连接。尝试使用Bind API首先创建套接字,然后将套接字绑定到“任意地址”,该地址将套接字绑定到本地计算机上可用的每个接口。

看来套接字绑定到了本地主机(127.0.0.1),这就是为什么您无法从其他计算机连接它,而它只能从本地计算机连接。尝试使用Bind API首先创建套接字,然后将套接字绑定到“任意地址”,该地址将套接字绑定到本地计算机上可用的每个接口。

这是为将来的新Haskeller准备的。 我的代码基于。 我根据上述建议进行了改进。导入语句仍然很松散,但修复它们只是众所周知的“读者练习”。我邀请您提出任何其他改进建议

import Network.Socket
import Control.Monad
import Network
import System.Environment (getArgs)
import System.IO
import Control.Concurrent (forkIO)

main :: IO ()
main = withSocketsDo $ do
   [portStr] <- getArgs
   sock <- socket AF_INET Stream defaultProtocol 
   let port = fromIntegral (read portStr :: Int)
       socketAddress = SockAddrInet port 0000 
   bindSocket sock socketAddress
   listen sock 1
   putStrLn $ "Listening on " ++ (show port)
   sockHandler sock

sockHandler :: Socket -> IO ()
sockHandler sock' = forever $ do
    (sock, _) <- Network.Socket.accept sock'
    handle <- socketToHandle sock ReadWriteMode
    hSetBuffering handle NoBuffering
    forkIO $ commandProcessor handle

commandProcessor :: Handle -> IO ()
commandProcessor  handle = forever $ do
    line <- hGetLine handle
    let (cmd:arg) = words line
    case cmd of
        "echo" -> echoCommand handle arg 
        "add" -> addCommand handle arg 
        _ -> do hPutStrLn handle "Unknown command"

echoCommand :: Handle -> [String] -> IO ()
echoCommand handle arg = do
    hPutStrLn handle (unwords arg)

addCommand :: Handle -> [String] -> IO ()  
addCommand handle [x,y] = do
    hPutStrLn handle $ show $ read x + read y
addCommand handle _ = do
    hPutStrLn handle "usage: add Int Int"
导入网络套接字
进口管制
导入网络
导入System.Environment(getArgs)
导入系统.IO
导入控制。并发(forkIO)
main::IO()
main=带库存的订单$do
[portStr]addCommand句柄参数
_->hPutStrLn是否处理“未知命令”
echoCommand::Handle->[String]->IO()
echoCommand句柄arg=do
hPutStrLn手柄(UNOWORDS参数)
addCommand::Handle->[String]->IO()
addCommand句柄[x,y]=do
hPutStrLn句柄$show$read x+read y
addCommand handle ux=do
hPutStrLn句柄“用法:添加Int”

这是为未来的新Haskeller设计的。 我的代码基于。 我根据上述建议进行了改进。导入语句仍然很松散,但修复它们只是众所周知的“读者练习”。我邀请您提出任何其他改进建议

import Network.Socket
import Control.Monad
import Network
import System.Environment (getArgs)
import System.IO
import Control.Concurrent (forkIO)

main :: IO ()
main = withSocketsDo $ do
   [portStr] <- getArgs
   sock <- socket AF_INET Stream defaultProtocol 
   let port = fromIntegral (read portStr :: Int)
       socketAddress = SockAddrInet port 0000 
   bindSocket sock socketAddress
   listen sock 1
   putStrLn $ "Listening on " ++ (show port)
   sockHandler sock

sockHandler :: Socket -> IO ()
sockHandler sock' = forever $ do
    (sock, _) <- Network.Socket.accept sock'
    handle <- socketToHandle sock ReadWriteMode
    hSetBuffering handle NoBuffering
    forkIO $ commandProcessor handle

commandProcessor :: Handle -> IO ()
commandProcessor  handle = forever $ do
    line <- hGetLine handle
    let (cmd:arg) = words line
    case cmd of
        "echo" -> echoCommand handle arg 
        "add" -> addCommand handle arg 
        _ -> do hPutStrLn handle "Unknown command"

echoCommand :: Handle -> [String] -> IO ()
echoCommand handle arg = do
    hPutStrLn handle (unwords arg)

addCommand :: Handle -> [String] -> IO ()  
addCommand handle [x,y] = do
    hPutStrLn handle $ show $ read x + read y
addCommand handle _ = do
    hPutStrLn handle "usage: add Int Int"
导入网络套接字
进口管制
导入网络
导入System.Environment(getArgs)
导入系统.IO
导入控制。并发(forkIO)
main::IO()
main=带库存的订单$do
[portStr]addCommand句柄参数
_->hPutStrLn是否处理“未知命令”
echoCommand::Handle->[String]->IO()
echoCommand句柄arg=do
hPutStrLn手柄(UNOWORDS参数)
addCommand::Handle->[String]->IO()
addCommand句柄[x,y]=do
hPutStrLn句柄$show$read x+read y
addCommand handle ux=do
hPutStrLn句柄“用法:添加Int”

您使用了什么
nmap
标志?更简单地使用
netstat-a-ptcp
您使用了什么
nmap
标志?更简单地使用netstat-a-ptcp这是最有意义的。今天晚些时候我会试试这个。我正在根据一篇关于tcp服务器示例的reddit文章改进代码。当它准备好接受批评时,我会发布我所做的。这是最有意义的。今天晚些时候我会试试这个。我正在根据一篇关于tcp服务器示例的reddit文章改进代码。当它准备好接受批评时,我会发布我所做的。