Hi.
Deine Fragestellung ist zwar nicht besonders genau, aber ich versuche es mal.
Zu Anfang... Es ist übersichtlier die PB-Konstanten zu nutzen, also anstatt zum Beispiel "case 1" einfach "case #PB_NetworkEvent_Connect" nehmen.
Zu deiner 1. Frage:
Es kann immer zu fehlern kommen, daher sind alle Eventualitäten abzudecken.
zur 2. Frage:
Klar wird "case 2" wieder aktiv sobald neue Daten anliegen. Allerdings erst nachdem der Code aus der Schleife abgearbeitet wir. Es wird eine Codezeile nach der anderen abgearbeitet. Arbeitest du aber mit Threads, dann sieht es anders aus, dann wird die Schleife zwar nicht "abgebrochen", allerdings der Code "parallel dazu" abgearbeitet. Aber davon gehe ich jetzt mal nicht aus.
Nun mal genauer zum du deinem Code. Da ich den Rest des codes nicht sehen kann, gehe ich jetzt nur mal auf die wichtigen Teile ein (wo und wie du die IDs speichers lasse ich mal weg).
NetworkServerEvent() liefert dir ob und welches Event eintritt, aber es sagt dir nicht, welche Verbindung das Event liefert. Unter "case 1" fragst du mit EventClient() noch korrekt ab, welche Verbindung aufgebaut wird unter "case 2" vergißt du das aber total. du weißt gar nicht welche verbindung die Daten liefert. Das kann so nicht klappen, höchsten "Glückstreffer" könnten vorkommen.
Du mußt
Code: Alles auswählen
rdata=ReceiveNetworkData(EventClient(), *rbuffer, 256) [code]
[/code]nutzen. Besser ist aber, wenn du "EventClient()" vor der Zeile in eine Variable schreibst, damit du die ID weiter verwenden kannst. Ist aber kein muß solange du keine Threads verwendest.
Das du die empfangenen Daten in einer Schleife in den String einliest, sehe ich mal nicht als Fehler oder unnötig an, sondern zum testen. Denn mit ReceiveNetworkData() kannst du den Inhalt ja gleich in den String "text" schreiben.
allerdings fragst du nicht ab, ob überhaupt daten angekommen sind. zwar müßte es theoretisch so sein, das "case 2" dies angeibt, aber ReceiveNetworkData kann auch -1 zurück liefern, was deine Schleife aber nicht abfängt und sogar zu einem speicherfehler führen könnte. zwar passiert dies normal wohl eher bei der verwendung von threads, aber ich selber versuche gerade rauszubekommen, wie es sich mit dem "systembuffer" verhält, wenn die verbindung vor dem abfragen schon wieder beendet ist.
Code: Alles auswählen
Select NetworkServerEvent()
Case 1
Debug "neue Verbindung angenommen"
If anz_id < 3
anz_id=anz_id+1
ClientID(anz_id) = EventClient()
If anz_id=1
Debug "erste Verbindung angenommen - führe zusi_verbinden() aus"
zusi_verbinden()
EndIf
text+Str(ClientID(anz_id))+Chr(10)
SetGadgetText(#Editor_0, text)
Debug text
EndIf
Case 2
Debug "Daten auf Verbindungsnummer " + Str(EventClient()) + " angekommen"
text=""
rdata=ReceiveNetworkData(EventClient(), *rbuffer, 256)
Debug "rdata= " + Str(rdata)
If rdata > 0
For zaehler=0 To rdata
text=text+Chr(PeekB(*rbuffer+zaehler))
Next
SetClipboardText(text)
Debug text
EndIf
EndSelect
Zum testen was ankommt, mußt du aber nicht die Zwischenablage nutzen, sondern nimm lieber den debugger. Anstadt " SetClipboardText(text)" schreib lieber "debug text".
was macht die Procedure zusi_verbinden()?
"debug" funktioniert nur, wenn der Debugger aktiviert ist. In der IDE (Entwicklungs-/Programierumgebung) mußt dazu das Icon mit dem "Käfer" gedrück sein.
ist der debugger NICHT aktiviert, löst "debug" aber KEINE fehler aus. es wird einfach nur kein Text angezeigt.
Ich schreibe das nur, weil du zwar auch schon sehr lange im Forum registriert bist, aber es selbst nicht einsetzt. sonst hättest du die Fehlerquelle (die du ja wohl hast) schnell selbst gefunden.
Gruß
Toshy