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 lft auf PORT 10032 und lft 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
> # Mlichkeit 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 knte
>  
> 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, knte man zB. in ein Serverlog reinschreiben
> 		# aber das geht 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"