2013-04-18 24 views
5

Obecnie śledzę numer Cloud-Haskell tutorial i utknęło pod numerem createTransport. Wydaje mi się, że mogę otworzyć tylko transport w wersji 127.0.0.1 dla serwera i nie mogę otworzyć transportu dla klienta, aby połączyć się z serwerem. Próbowałem użyć dwóch maszyn, używając adresu curl ifconfig.me, aby uzyskać mój adres IP, jednak createTransport nie utworzyłby dla mnie transportu. Jakieś pomysły?Jak korzystać z createTransport?

EDYCJA: lokalnie działa.

Mój program jest dokładnie taka sama jak w tutorialu, starając się łączyć między dwoma komputerami:

curl ifconfig.me powraca 101.119.27.24

wiersza polecenia dla serwera:

ServerClientServer 101.119.27.24 9000 

Błąd zwracany:

bind: unsupported operation (Cannot assign rerquested address) 

EDIT:kod serwera, jak następuje:

main :: IO() 
main = do 
    [host, port] <- getArgs 
    serverDone  <- newEmptyMVar 
    Right transport <- createTransport host port 
    Right endpoint <- newEndPoint transport 
    forkIO $ echoServer endpoint serverDone 
    putStrLn $ "Echo server started at " ++ show (address endpoint) 
    readMVar serverDone `onCtrlC` closeTransport transport 

W echoServer i onCtrlC funkcje określone w inny moduł.

Zmieniłem Right transport <- createTransport host port do

t <- createTransport host port defaultTCPParameters 
let transport = case t of 
    (Right t) -> t 
    (Left e) -> error $ show e 

tak, że mogę zobaczyć, co jest komunikat o błędzie.

+0

Czy możesz podać nam kod, który nie działa zgodnie z oczekiwaniami? Co powiesz na "createTransport iNADDR_ANY" 3000 "defaultTCPParameters"? –

+0

Z którym serwerem współpracujesz? Ostatni raz, kiedy użyłem tego projektu, był back-end dla lokalnej pracy sieciowej. Od tego czasu widziałem wersję peer to peer pojawiającą się na hackage i jedną lub dwie inne. – Davorak

+0

Backend jak w pakiecie? network-transport-tcp-0.3.1 – HHC

Odpowiedz

0

Wspólnoty wiki odpowiedź na podstawie opinii:

Jesteś za urządzenia NAT (takiego jak router) i adres, o którym mowa należy do urządzenia, a nie na komputerze. Nie możesz tego powiązać.

Wypróbuj polecenie ifconfig (ipconfig w systemie Windows). Otrzymasz adres w sieci lokalnej lub kilka adresów w kilku sieciach (na przykład przewodowych i bezprzewodowych). Jeśli masz typową sieć domową podłączoną do routera szerokopasmowego, adresy te będą widoczne z sieci domowej, ale nie z Internetu. Aby serwer był dostępny z zewnątrz, musisz skonfigurować "otwór" w routerze. To wszystko podstawowe rzeczy związane z siecią, musisz się tego nauczyć, jeśli chcesz zrobić coś "pochmurnego".