2012-03-08 5 views
0
module Main where 
import Network 
import Network.Socket 
import System.IO 

main :: IO() 
main = withSocketsDo $ do 
addrInfos <- getAddrInfo Nothing (Just "localhost") (Just "23") 
s <- socket (addrFamily (head addrInfos)) Stream defaultProtocol 
connect s (addrAddress (head addrInfos)) 
h <- socketToHandle s ReadWriteMode 
hSetBuffering h (BlockBuffering Nothing) 

l <- hGetLine h 
putStrLn l 

Я пытаюсь сделать пример haskell для входа в систему и отправить полученные команды жестко заданной строки telnet. До сих пор у меня есть что-то вроде этого. Я ожидал увидеть «login:» на экране, но ничего не показывает?haskell basic telnet network socket example 2

+1

Используя netcat, который вы, вероятно, должны научиться использовать для тестирования базовой связи, этот код подключается к серверу TCP-сервера. Он также повторил то, что я ввел в сервер 'nc'. Если он не работает для вашего сервера telnet, я предлагаю вам проверить очевидные вещи (порты, IP-адреса, сервер telnet и т. Д.). –

+0

nc -l 23 работает для меня тоже, поэтому я предполагаю, что это означает, что telnetd ожидает какого-то рукопожатия. В любом случае, я попытаюсь выяснить, как работает протокол telnet, и задать еще один вопрос, если я застрял. Почему это невозможно обсуждать в одном вопросе, не будучи закрытым, выходит за меня. –

+1

Не так ясно, что вы сделали домашнее задание здесь, что может способствовать тому, почему вы не получаете много положительного ответа. Такие вопросы, как «напишите мне код, который подключается к серверу telnet», не очень вежливы. Однако, возможно, вам понравится [RFC 854] (http://tools.ietf.org/html/rfc854), что также поможет вам сформулировать более конкретный вопрос. –

ответ

1

Не используйте BlockBuffering Nothing. Используйте NoBuffering. В пиктах очень ясно, что BlockBuffering Nothing обеспечивает буферизацию, зависящую от реализации, а не буферизацию. Таким образом, буферизация вполне может мешать функции hGetLine.

Смежные вопросы