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