Hallo,
ich habe ein Problem.
Ich möchte unter Ruby einen Server programmieren, der Daten in Empfang nimmt und auf Grund einer Kennung in den Daten entsprechend reagiert. Ich habe das realisiert, lese die Daten in einen String ein (session.gets() ), werte die ersten 3 Zeichen als Kennung aus und reagierte darauf. Läuft prima.
Jetzt benötige ich aber einen Server, an den sich ein Client mittels „Standverbindung“ anmeldet, der also nach dem Senden den Port nicht schliesst. Ohne das Schliessen des Clients erkennt mein Server das Datenende nicht. Das muss ich ändern, aber wie? Mit session.read() komm ich nicht weiter.
In den Daten, die gesendet werden, (jetzt binär durch ein c-Programm) steht als short die Telegrammlänge, als Short die Kennung und dann weitere Daten. mit pack und unpack kann ich den binärdaten zu Leibe rücken, das funktioniert auch, solange der Client die Verbindung schliesst. Aber wie sag ich dem Server: lese das Telegramm bis Ende und warte auf das nächste Telegramm ohne dass der Client die Verbindung beendet?
server = TCPServer.open( host, port)
loop do # Beginn der Endlosschleife
begin
session = server.accept
str = session.gets()
kennung = str[0…3].to_i
case kennung
when serverKill …
end
rescue
printf( „ERROR accept — gets ERROR: #{$!}“ )
end
end
Für jede Antwort bin ich dankbar