2013-04-18 19 views
5

Ich bin im Moment folgende Cloud-Haskell tutorial und ist bei createTransport stecken. Es scheint mir, dass ich nur einen Transport bei 127.0.0.1 für den Server öffnen kann und keinen Transport für den Client öffnen kann, um eine Verbindung zum Server herzustellen. Ich habe versucht, zwei Maschinen zu verwenden, zu verwenden, um meine IP-Adresse zu erhalten, createTransport würde jedoch keinen Transport für mich erstellen. Irgendwelche Ideen?Wie verwende ich createTransport?

EDIT: lokal jetzt funktioniert.

Mein Programm ist genau das gleiche wie das Tutorial, versuchen, zwischen zwei Computern zu verbinden:

curl ifconfig.me kehrt 101.119.27.24

Befehlszeile für Server:

ServerClientServer 101.119.27.24 9000 

Fehler zurückgegeben:

bind: unsupported operation (Cannot assign rerquested address) 

EDIT: Der Server-Code ist wie folgt:

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 

Die echoServer und onCtrlC Funktionen definiert sind in einem anderen Modul.

änderte ich den Right transport <- createTransport host port in

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

so dass ich, was ist die Fehlermeldung sehen.

+0

Können Sie uns Code zur Verfügung stellen, der nicht wie erwartet funktioniert? Wie wäre es mit 'createTransport iNADDR_ANY" 3000 "defaultTCPParameters'? –

+0

Mit welchem ​​Backend arbeiten Sie? Das letzte Mal, als ich das Projekt hier benutzt habe, war ein Backend für das lokale Netzwerk. Seitdem habe ich eine Peer-to-Peer-Version auf dem Hack und ein oder zwei andere gesehen. – Davorak

+0

Backend wie im Paket? Netzwerk-Transport-tcp-0.3.1 – HHC

Antwort

0

Gemeinschafts-wiki Antwort basierend auf Kommentare:

Sie sind hinter einem NAT-Gerät (wie ein Breitband-Router) und die betreffenden Adresse gehört zu dem Gerät, nicht auf Ihren Computer. Sie können nicht daran binden.

Versuchen Sie den ifconfig Befehl (ipconfig unter Windows). Sie erhalten eine Adresse in Ihrem lokalen Netzwerk oder mehrere Adressen in mehreren Netzwerken (z. B. drahtgebunden und drahtlos). Wenn Sie ein typisches Heimnetzwerk mit einem Breitbandrouter verbunden haben, sind diese Adressen von Ihrem Heimnetzwerk, aber nicht aus dem Internet sichtbar. Um Ihren Server von außen zugänglich zu machen, müssen Sie ein "Loch" in Ihrem Router konfigurieren. Dies ist alles grundlegende Netzwerk-Zeug, Sie müssen es lernen, wenn Sie etwas "bewölkt" tun wollen.