ReceiveNetworkdata() gibt -1 aus ?
Verfasst: 29.12.2004 20:06
Hallo!
Ich bastel im Moment an was, was mit etwas Glück ein Messenger werden könnte. Dabei habe ich im Hauptproggy (Server) einfach ein Script, dass die Daten an den entsprechenden Client weiterleiten soll, funzt wunderbar, soweit es fertig ist:
Server
Darauf soll zunächst (erster Client, dessen connectionID auch dann in der variable localuser gespeichert wird) das GUI zugreifen:
Client 1 (localuser)
Ist im Moment noch eine Konsole. Wie auch immer, die Konsole sendet alle Eingaben ( Input() ) an den Server geschickt. mit allen Eingaben geschieht nix, die gehen ins Datennirvana, das ist gewollt. Aber sobald das Kommando "quit" gesendet wird (ergänzung, alle gesendeten Daten haben hintendran #CRLF$), schickt der Server das Kommando zurück, damit sich der Thread beendet.
Schön und Gut. Tut er auch, wenn quit das erste Kommando ist. Aber sobald vorher ein String gesendet wurde, beendet sich der Prozess nicht. Er findet es nämlich nötig, für die Länge der erhaltenen Daten (die er de Facto nicht erhält) eine Länge < 0 auszugeben, um genau zu sein -1.
Kann mir bitte jemand sagen, warum?
mfg
crX
Ich bastel im Moment an was, was mit etwas Glück ein Messenger werden könnte. Dabei habe ich im Hauptproggy (Server) einfach ein Script, dass die Daten an den entsprechenden Client weiterleiten soll, funzt wunderbar, soweit es fertig ist:
Server
Code: Alles auswählen
InitNetwork()
cns = CreateNetworkServer(86)
Debug cns
buffersize = 4096
*buffer = AllocateMemory(buffersize)
quit = 0
If cns
Repeat
nse = NetworkServerEvent()
If nse
ncid = NetworkClientID()
Select nse
Case 1 ;client connects
Debug "new client"
If client = 0
localuser = ncid
EndIf
client = client + 1
Case 2 ;rawdata sent
rnd = ReceiveNetworkData(ncid, *buffer, buffersize)
message.s = PeekS(*buffer, rnd)
Debug message.s
If ncid <> localuser Or message.s = "quit" + #CRLF$
SendNetworkString(localuser, message.s)
EndIf
Case 3 ;file sent
Debug "geht nix"
Case 4 ;disconnect
Debug "client lost"
If ncid = localuser
Debug "it was the local user » quitting server"
quit = 1
EndIf
Default
Delay(1)
EndSelect
EndIf
Delay(10)
Until quit = 1
Else
Debug "error » could not create server on port 86"
EndIf
CloseNetworkServer()
Debug "Done."
Client 1 (localuser)
Code: Alles auswählen
InitNetwork()
Procedure getserverdata(oncp)
*bufferp = AllocateMemory(4096)
Repeat
nce = NetworkClientEvent(oncp)
If nce
Select nce
Case 2
rndp = ReceiveNetworkData(oncp, *bufferp, 4096)
PrintN(Str(rndp))
If rndp < 0
rndp = 6
EndIf
messagep.s = PeekS(*bufferp, rndp)
PrintN(messagep.s)
If Left(messagep.s, 4) = "quit"
quitp = 1
FreeMemory(*bufferp)
CloseNetworkConnection(oncp)
nce = 0
EndIf
Case 3
PrintN("muh, geht nix")
Default
Delay(5)
EndSelect
EndIf
Until quitp = 1
EndProcedure
quit = 0
OpenConsole()
onc = OpenNetworkConnection("127.0.0.1", 86)
If onc
Repeat
cth = CreateThread(@getserverdata(), onc)
inp.s = Input()
PrintN("")
If inp.s = "quit"
quit = 1
EndIf
SendNetworkString(onc, inp.s + #CRLF$)
Until quit = 1
WaitThread(cth)
PrintN("Program execution finished.")
Print("enter to exit")
Input()
Else
PrintN("Could not open Network Connection")
Print("enter to exit")
Input()
EndIf
Schön und Gut. Tut er auch, wenn quit das erste Kommando ist. Aber sobald vorher ein String gesendet wurde, beendet sich der Prozess nicht. Er findet es nämlich nötig, für die Länge der erhaltenen Daten (die er de Facto nicht erhält) eine Länge < 0 auszugeben, um genau zu sein -1.
Kann mir bitte jemand sagen, warum?
mfg
crX