Die habe ich bisher nur hinbekommen, wenn ich zwischen dem Sendstring() und getstring() einen größeren Delay() gesetzt habe. Damit funktioniert es zwar, aber gib es da nicht eine bessere Lösung ?
Muss ich getstring anders schreiben ? Wenn ja dann wie?
Code: Alles auswählen
EnableExplicit
Global ConnectionID
Global IP.s="192.168.40.29" ;hier anpassen
Global User.s="root"
Global Pass.s=""
Global Port=23
Declare connect()
Declare SendString(ConnectionID, String.s)
Declare .s GetString(ConnectionID, TimeOut = 5000)
InitNetwork()
ConnectionID=connect()
Debug ConnectionID
Procedure connect()
Protected connec.s
ConnectionID= OpenNetworkConnection(IP, Port)
If ConnectionID
;Delay(100)
connec.s = GetString(ConnectionID)
Debug connec
If FindString(connec, "login:", 1, #PB_String_CaseSensitive)
SendNetworkString(ConnectionID, User +#CRLF$, #PB_Ascii)
Delay(100)
connec.s = GetString(ConnectionID)
Debug connec
Delay(100)
If FindString(connec, "Password", 1, #PB_String_CaseSensitive)
If SendNetworkString(ConnectionID, Pass +#CRLF$, #PB_Ascii)
Delay(500)
connec.s = GetString(ConnectionID)
Debug connec
EndIf
EndIf
EndIf
ProcedureReturn ConnectionID
Else
MessageRequester("Error", "Please check IP and Port ! ", #MB_ICONERROR)
EndIf
EndProcedure
Procedure SendString(ConnectionID, String.s)
Protected Size, *Buffersend, Result = #Null
String = String + #CRLF$
Size = StringByteLength(String, #PB_UTF8) + 1
*Buffersend = AllocateMemory(size)
If *Buffersend
PokeS(*Buffersend, String, Size, #PB_UTF8)
Result = SendNetworkData(ConnectionID, *Buffersend, MemorySize(*Buffersend)-1)
FreeMemory(*Buffersend)
EndIf
ProcedureReturn Result
EndProcedure
Procedure.s GetString(ConnectionID, TimeOut = 5000)
Protected *Buffer, t, Size, Text.s
Delay(200)
*Buffer = AllocateMemory(65536)
t = ElapsedMilliseconds()
If *Buffer
While NetworkClientEvent(ConnectionID) <> 2 And ElapsedMilliseconds()-t < Timeout
Delay(100)
Wend
Repeat
Size=ReceiveNetworkData(ConnectionID, *Buffer, 65536)
Text.s = PeekS(*Buffer, Size, #PB_Ascii)
If Size<65536
Break
EndIf
ForEver
FreeMemory(*Buffer)
ProcedureReturn Text
EndIf
EndProcedure