ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: her mit eruem code...
BeitragVerfasst: 29 Jan 2003, 17:21 
Offline
Nuby

Registriert: 27 Jan 2003, 19:01
Beiträge: 7
ich würde gern ein paar cgi skripte sehen auch wenns nix dolles ist ein paar programme wären auch ganz nett, postet mal eure kreationen und seit net so schüchtern !


Nach oben
 Profil  
 
 Betreff des Beitrags: hmm,
BeitragVerfasst: 30 Jan 2003, 13:32 
Offline
Nuby

Registriert: 28 Dez 2002, 00:04
Beiträge: 6
Wohnort: FStone
hier ein kleiner multithrea Server mit Client zum file up und download, ist nix besonderes und kann noch sehr stark erweitert werden. Aber ganz nett und man sieht wie leicht sowas mit Ruby zu realisieren ist
die server.rb


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/usr/bin/env ruby





require 'socket'





def hochladen(sock)
# zuerst sagen wir dem Client dass wir verstanden haben
# was er will
sock.write("ok\n")

# und warten auf den Dateinamen
begin
dateiname = sock.gets
dateiname.chomp!
if File::exist?(dateiname)
flag = true
sock.write("exist\n")
puts "Datei " + dateiname + " existiert bereits !\n"
else
flag = false
sock.write("ok\n")
end
# Existert dieses File schon ?
# dann k��nnen wir es nicht einfach so hochladen !
end while flag
puts dateiname + " wird hochgeladen\n"

# Jetzt ��ffnen wir die Datei zum schreiben
# Und senden dem Client ein signal ob dies
# funktioniert hat.

File::open(dateiname,mode="w") do |file|
if file
sock.write("ok\n")
else
sock.write("f\n")
end
lesen = sock.gets
lesen.chomp!
bytezaehler = 0
while bytezaehler < lesen.to_i
file.putc(sock.getc)
bytezaehler=bytezaehler+1
end
end
end





def runterladen(sock)
# zuerst sagen wir dem Client dass wir verstanden haben
# was er will

sock.write("ok\n")

# und warten auf den Dateinamen

datei = sock.gets
datei.chomp!

# Das File kann nur gesaugt werden wenn es auch wirklich existiert

if File::exist?(datei)
puts datei + " wird runtergeladen\n"
sock.write("ok\n")
# So jetzt gehts ans senden der Daten
File::open(datei) do |file|
if file
# zuerst senden wir dem Client die Gr��sse
# der Datei, damit er weiss wann die
# ��bertragung beendet ist.
groesse = File::size(datei)
sock.write(groesse)
sock.write("\n")
while !file.eof
sock.putc(file.getc)
end
end
end
else
# Datei existiert nicht auf dem Server
sock.write("nofile\n")
end
end

def verzeichnisanzeigen(sock)
# Diese Funktion sendet das Verzeichnis an den Client
Dir::foreach("./") { |list|
if FileTest.directory?(list)
str = "DIR " + list + "\n"
sock.write(str)
else
str = "FILE " + list + "\n"
sock.write(str)
end
}
sock.write("ende\n")
end



gs = TCPServer.open(10032) # Es wird ein Server auf Port 10032 gestartet









Thread.start() do |endlos|
loop {

# Wenn eine Verbindungsanfrage eingeht wird ein eigener
# Thread gestartet f��r den User und ein Socketobjekt erstellt

Thread.start(gs.accept) do |s|

# Statusmeldung, k��nnte man zB. in ein Serverlog reinschreiben
# aber das geh��rt 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
auswahl = " "
while auswahl != "E"
s.gets
auswahl = $_
auswahl.chop! # Die \n Zeichen am ende werden entfernt
if auswahl == "H"
# Der Client will also eine Datei hochladen
hochladen(s)
end
if auswahl == "D"
# Der Client will also eine Datei vom Server runterladen
runterladen(s)
end
if auswahl == "DIR"
# Der Client will das Serverzeichnis haben
verzeichnisanzeigen(s)
end
end
print ("Die Session von ", s, " wurde beendet \n")
s.close
end
}
end


gets


und die client.rb


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
#!/usr/bin/env ruby




require 'socket'

def menue
# Stellt das Hauptmenue dar.
puts "\n\n Menue : \n\n"
puts "1 => Datei hochladen\n"
puts "2 => Datei runterladen\n"
puts "3 => Eigenes Directory ansehen\n"
puts "4 => Directory des Servers ansehen\n"
puts "5 => Programm beenden\n"
gets
return $_.to_i
end

def dateiname
# Dateinameneingabe
gets
return $_
end

def hochladen(verbindung)
# Diese Funktion ist f��r das Hochladen von
# Programmen zust��ndig

puts "\nSie wollen also eine Datei hochladen"

# Nun senden wir dem Server zuerstmal was wir
# vorhaben, wir wollem eine Datei hochladen
# Also senden wir erstmal ein "H" damit der
# Server dies auch weiss und ins richtige
# Unterprogramm springt.

verbindung.write("H\n")

# Jetzt warten wir auf die Antwort ob das okay ist.

antwort = verbindung.gets
puts "\nWie heisst die Datei die sie hochladen wollen ? \n"
datei = dateiname # Den Dateinamen brauchen wir
datei.chomp!
if File::exist?(datei)
begin
puts "\nWie soll die Datei auf dem Server heissen ? \n"
upname = dateiname # Der Dateiname wie sie auf dem Server heissen soll
upname.chomp!

# Jetzt senden dann den Dateinamen.

verbindung.write(upname+"\n")

antwort = verbindung.gets
if antwort.chomp == "ok"
flag = false

# Der Server sendet nun ein ok falls er die Datei erstellen kann
# Nur dann laden wir die Datei hoch

allesokay = verbindung.gets
if allesokay.chomp == "ok"

# Die Ladegeschwindigkeit und Dauer wird ermittelt.
zeitstempelanfang = Time.now
# So jetzt gehts ans senden der Daten

File::open(datei) do |file|
if file
# zuerst senden wir dem Server die Gr��sse
# der Datei, damit er weiss wann die
# ��bertragung beendet ist.
groesse = File::size(datei)
verbindung.write(groesse)
verbindung.write("\n")
while !file.eof
zeile = file.getc
verbindung.putc(zeile)
end
end
zeitstempelende = Time.now - zeitstempelanfang
puts "\n Der Upload dauerte " + zeitstempelende.to_s + " Sekunden\n"
puts " Das sind " + (groesse/zeitstempelende/1024).to_s + " kBytes/sec.\n"
end

else
puts "Sorry, der Server hat ein Problem beim Dateierstellen, kein upload m��glich !\n"
flag = true
end
end
if antwort.chomp == "exist"
flag = true
puts "Sorry, das File existiert schon auf dem Server !\n"
end
end while flag
else
puts "Sorry, aber die die Datei existeirt gar nicht !"
end
end

def runterladen(verbindung)
# Diese Funktion sit f��r das runterladen
# von Dateien vom Server zust��ndig

puts "\nSie wollen also eine Datei runterladen\n"

puts "Geben sie den Namen der Datei an die sie runterladen moechten ?\n"
datei = dateiname # Den Dateinamen brauchen wir
datei.chomp!

begin
# Diese Schleife liest solange einen Namen ein bis dieser nicht
# auf dem Clientrechner existiert, wir ��berschreiben also nie
# etwas !!

puts "Unter welchem Namen soll die Datei gespeichert werden ?\n"
runtergeladen = dateiname
runtergeladen.chomp!
if File::exist?(runtergeladen)
flag = true
puts "Diesen Dateinamen gibt es schon !\n"
else
flag = false
end
end while flag

# Nun senden wir dem Server zuerstmal was wir
# vorhaben, wir wollem eine Datei hochladen
# Also senden wir erstmal ein "H" damit der
# Server dies auch weiss und ins richtige
# Unterprogramm springt.

verbindung.write("D\n")

# Jetzt warten wir auf die Antwort ob das
# okay ist und senden dann den Dateinamen
# des Files das wir gerne haben m��chten

antwort = verbindung.gets
if antwort.chomp! == "ok"
verbindung.write(datei)
verbindung.write("\n")
end

antwort = verbindung.gets
if antwort.chomp == "ok"

# Die Ladegeschwindigkeit und Dauer wird ermittelt.
zeitstempelanfang = Time.now
# Jetzt ��ffnen wir die Datei zum schreiben
# Und senden dem Client ein signal ob dies
# funktioniert hat.

datei = runtergeladen
File::open(datei,mode="w") do |file|
lesen = verbindung.gets
lesen.chomp!
bytezaehler = 0
while bytezaehler < lesen.to_i
file.putc(verbindung.getc)
bytezaehler=bytezaehler+1
end
zeitstempelende = Time.now - zeitstempelanfang
puts "\n Der Download dauerte " + zeitstempelende.to_s + " Sekunden\n"
puts " Das sind " + (lesen.to_i/zeitstempelende.to_i/1024).to_s + " kBytes/sec.\n"
end
else
puts "Sorry, aber die Datei existiert nicht auf dem Server !"
end
end

def eigenesverzeichnis
# Diese Funktion zeigt das aktuelle Verzeichnis auf dem Client an
puts "\n\n Ihr Verzeichnis : \n"
Dir::foreach("./") { |list|
if FileTest.directory?(list)
puts "DIR " + list + "\n"
else
puts "FILE " + list + "\n"
end
}
end

def serververzeichnis(verbindung)
# Diese Funktion zeigt das Verzeichnis des Servers an

puts "\n\nDas Verzeichnis auf dem Server wird abgerufen !\n"
verbindung.write("DIR\n")
begin
antwort = verbindung.gets
puts antwort
end while antwort.chomp != "ende"
end

def abbrechen(verbindung)

# Die Verbindung wird beendet
verbindung.write("E\n")
verbindung.close
end







host = (if ARGV.length == 2; ARGV.shift; else "localhost"; end)
port = (if ARGV.length == 1; ARGV.shift; else 10032; end)
puts "\n\nEs wird eine Verbindung nach " + host.to_s + " aufgebaut\n"


sock = TCPSocket.open(host, port.to_i)

if sock




puts "Die Verbindung steht\n"
begin
auswahl = 0
auswahl = menue
if auswahl==1
hochladen(sock)
end
if auswahl==2
runterladen(sock)
end
if auswahl==3
eigenesverzeichnis
end
if auswahl==4
serververzeichnis(sock)
end
if auswahl==5
abbrechen(sock)
end
end until auswahl==5
end


viel spass damit.

_________________
mfg. JoelH


Nach oben
 Profil  
 
 Betreff des Beitrags: Threads in Ruby
BeitragVerfasst: 30 Jan 2003, 17:07 
Offline
Lehrling

Registriert: 24 Jun 2002, 13:32
Beiträge: 95
Wohnort: Berlin
[edit]
hab das cgi uebersehen :b

_________________
...mind your brain
SelfRuby
JBB


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 05 Feb 2003, 18:57 
Offline
Böser Admin

Registriert: 18 Jun 2002, 17:18
Beiträge: 60
Wohnort: München
hm... da muss ich erst suchen ;)

_________________
on my way, nails broke and fell into the wishing well


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: