Leuchtkeks
Level-1
- Beiträge
- 26
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo,
hab hier ein kleines Problem mit einer Client-Anwendung. Als "Server" dient mir momentan ein kleines Test-Tool (http://www.drk.com.ar/builder.php). Verbinden und Daten senden funktioniert, allerdings wenn ich die Verbindung händisch resete (siehe step 100 im Programm) oder künstlich einen Fehler erzeuge (Kabel ziehen) erhalte ich bei TcpClient() als Status 32608. Ich weiß jetzt aber nicht hab ich einen Fehler gemacht oder liegt das an dem Test-Tool. Hier mal der Code:
Im Handbuch ist kein Beispiel und ich weiß jetzt nicht mach ich bei TcpClose() was falsch oder muß ich noch irgendwelche Optionen setzen?
Im Handbuch steht zum Fehler 32608 nur folgendes:
Gruß,
Marco
hab hier ein kleines Problem mit einer Client-Anwendung. Als "Server" dient mir momentan ein kleines Test-Tool (http://www.drk.com.ar/builder.php). Verbinden und Daten senden funktioniert, allerdings wenn ich die Verbindung händisch resete (siehe step 100 im Programm) oder künstlich einen Fehler erzeuge (Kabel ziehen) erhalte ich bei TcpClient() als Status 32608. Ich weiß jetzt aber nicht hab ich einen Fehler gemacht oder liegt das an dem Test-Tool. Hier mal der Code:
Code:
case ssw of
; init
action 0:
sockOpen.enable = 1
sockOpen.pIfAddr = 0
sockOpen.port = 0
sockOpen.options = 0
ssw = 1
endaction
; warte auf verbindung
action 1:
sockOpen FUB TcpOpen()
if (sockOpen.status <> 65535) then
; ok
if (sockOpen.status = 0) then
ssw = 2
; fehler
else
ssw = 100
endif
endif
endaction
; optionen setzen
action 2:
linger_opt.lLinger = 0
linger_opt.lOnOff = 1
sockIO.enable = 1
sockIO.ident = sockOpen.ident
sockIO.ioctl = tcpSO_LINGER_SET
sockIO.pData = adr(linger_opt)
sockIO.datalen = sizeof(linger_opt)
ssw = 3
endaction
action 3:
sockIO FUB TcpIoctl()
if (sockIO.status = 0) then
ssw = 4
endif
endaction
; client einrichten
action 4:
sockClient.enable = 1
sockClient.ident = sockOpen.ident
sockClient.pServer = adr("192.168.10.60")
sockClient.portserv = 1234
ssw = 5
endaction
; FUB abarbeiten bis verbunden
action 5:
sockClient FUB TcpClient()
wait = wait +1
; timeout wenn kabel abgezogen
if (wait > 20) then
wait = 0
ssw = 100
endif
if (sockClient.status <> 65535) then
; ok
if (sockClient.status = 0) then
ssw = 6
; fehler
else
ssw = 100
endif
endif
endaction
; warte-loop
action 6:
if (aktidx <> logbuf.idx) then
ssw = 10
endif
endaction
; daten senden
action 10:
sockSend.enable = 1
sockSend.ident = sockOpen.ident
sockSend.pData = adr(logbuf.msg[aktidx].msg)
sockSend.datalen = strlen(adr(logbuf.msg[aktidx].msg)) +1
ssw = 11
endaction
; FUB abarbeiten bis daten gesendet wurden
action 11:
sockSend FUB TcpSend()
if (sockSend.status <> 65535) then
; ok
if (sockSend.status = 0) then
aktidx = aktidx +1
if (aktidx = maxsize) then
aktidx = 0
endif
ssw = 4
; retry
else if (sockSend.status = 32607) then
ssw = 12
; fehler
else
ssw = 100
endif
endif
endaction
; kurz warten
action 12:
wait = wait +1
if (wait > 5) then
wait = 0
ssw = 11
endif
endaction
; fehler -> reconnect
action 100:
sockClose.enable = 1
sockClose.ident = sockOpen.ident
sockClose.how = 0
ssw = 101
endaction
action 101:
sockClose FUB TcpClose()
if (sockClose.status <> 65535) then
ssw = 102
endif
endaction
; kurz warten
action 102:
wait = wait +1
if (wait > 20) then
wait = 0
ssw = 0
endif
endaction
endcase
Im Handbuch ist kein Beispiel und ich weiß jetzt nicht mach ich bei TcpClose() was falsch oder muß ich noch irgendwelche Optionen setzen?
Im Handbuch steht zum Fehler 32608 nur folgendes:
Wird der Status tcpERR_INVALID returniert, muss der Client-Ident komplett geschlossen (TcpCLose()) werden. Soll erneut versucht werden, eine Verbindung aufzubauen, ist wieder von vorne zu beginnen (TcpOpen(), Optionen setzen, TcpConnect()).
Gruß,
Marco
Zuletzt bearbeitet: