On 2002-12-18 01:56:36 +0900, Jonas Hoffmann wrote: > [CODE] > #!/usr/bin/ruby > # Dies ist der Server der auf die Verbindung wartet und entweder > # Dateien versendet oder sie hochlçÅ > # Der Server lçÖft auf PORT 10032 und lçÖft in einer Endlosschleife > # noch > > require 'socket' > > > def hochladen ^^^^^^^^^^^^^^^ Finish this method or delete this line. > gs = TCPServer.open(10032) #Es wird ein Server auf Port 10032 gestartet > > # Der Server wartet auf einen Verbindungsaufbau. Dies > # ist als Endlosschleife gemacht da es in Ruby leider keine > # Möçlichkeit gibt auf eine Tastatureingabe zu warten und > # trotzdem weiter zu laufen. Vielleicht kann man das mit > # Threads realisieren aber ich hab momentan noch keinen > # Plan wie ich dies machen köînte > > while true "loop do" is perhaps better style. Im glad that Ruby doesn't require one to use tricks if one really wishes to program that infinite loop. > # Wenn eine Verbindungsanfrage eingeht wird ein eigener > # Thread gestartet f den User und ein Socketobjekt erstellt > Thread.start(gs.accept) do |s| > > # Statusmeldung, köînte man zB. in ein Serverlog reinschreiben > # aber das gehöòt ja nicht zur Aufgebenstellung, deshalb hier > # nur auf dem Bildschirm bisher, aber das umleiten solte kein > # Problem darstellen > > print(s, " hat eine Verbindung aufgebaut\n") > > # Wir warten darauf was der User tun will > s.gets > auswahl = $_ > auswahl.chop! # Die \n Zeichen am ende werden entfernt > > if auswahl == "H" # Der Client will also eine Datei hochladen > # zuerst sagen wir dem Client dass wir verstanden haben > # was er will > s.write("ok\n") > # und warten auf den Dateinamen > s.gets > dateiname = $_ > dateiname.chop! > puts dateiname + " wird hochgeladen\n" > # Jetzt öæfnen wir die Datei zum schreiben > # Und senden dem Client ein signal ob dies > # funktioniert hat. > dateiname = dateiname + "up" > f = File::open(dateiname,mode="w") It is a good Ruby idiom to use a block here: File::open(dateiname, "w") do |f| # ... end The file 'f' is closed at the final end. > if f > s.write("ok\n") > else > s.write("f\n") An "end" is missing here. > lesen = s.gets > lesen.chomp! > bytezaehler = 0 > while bytezaehler < lesen.to_i > f.putc(s.getc) > bytezaehler=bytezaehler+1 > end > f.close > end > if auswahl == "D" > # > # > # > end > print (s, " wurde abgebrochen\n") Ruby warns with "-w" here. "print(s, ..." would be better. > s.close > end > end > [/CODE] > > And her i get a parse Error in Line 75, its one of the two end at the > end of the file . I think the Problem is the Thread Command but i do > not know what to do :( I hope somebody can !? And perhaps can explain > what my error. I hope I could help you. -- 7) "Klingon function calls do not have 'parameters' - they have 'arguments' - and they ALWAYS WIN THEM." -- "Top 12 things likely to be overheard if you had a Klingon Programmer"