Avanti-W: Schutzverletzung in procav.exe
Ev. Konsistorium
eksol at t-online.de
Mi Mai 19 12:49:51 CEST 1999
Sibylle Koczian schrieb:
> >2. Der Server schreibt weiter (asynchron)
> >-> Wahrscheinlich laeuft der Schreibpuffer voll
> >abstellbar durch setblocking(1)
> >
> Wo? Im Client? Waere das gleichbedeutend mit dem Umstellen vom asynchronen
> auf einen blockierenden Socket ...?
Ja
> Der Job ist ziemlich einfach:
Werde ich ausprobieren
> Ich vermute, dass ich irgendwo ziemlich grundlegende Verstaendnisprobleme
> habe - so dass es eine Riesenhilfe waere, wenn Sie brauchbare Literatur zur
> Internet-Programmierung wissen.
Berkley-Socket´s werden in der Regel werden in der Regel unter ferner
liefen in der Literatur zur Unix-Systemprogrammierung ganz hinten bei
der Interprozesskommunikation besprochen, d.h. Systemaufrufe und deren
Struktur in C.
Bestenfalls findet man fuer "seine" Programmiersprache ein
Minimalbeispiel fuer eine Ping-Pong Client-Server Verbindung. Der
Sprachumfang der Socket-Programmierung ist auch nicht so allgewaltig,
socket, bind, listen, connect ,send, recieve, close und noch noch das
eine oder andere an set/get-Befehlen.
Nebenher habe ich den Python-Client von Herrn Hoeppner mal
minimalisiert, d.h. all die fortschrittlichen Sprachmittel, die man im
ersten Einsatz anwenden wuerde, zugunsten einfacher Lesbarkeit
rausgeschmissen. Auf der CD ist ja ein Python 1.5.1 mit dem sie es
ausprobieren können.
<-------- Ausschneiden -------------------->
#!/usr/bin/python
#A
#Basismodule laden
from socket import *
import string
import regsub
#B
#Ein Testjob in der Variablen "job1" zusammenbasteln
job1 = "& c:\\avantiw\\avdemo\\ \n"
job1 = job1 + "qrix n 50 \n qrix 1 a \n"
job1 = job1 + "@DB=avdemo ID=opac/OPAC \n"
job1 = job1 + "AVANTI:EOJ\n"
#C
#Verbindung herstellen
#C.1 Unter dem Namen "cl" eine Verbindung vorbereiten
cl = socket(AF_INET,SOCK_STREAM)
#C.2. Die Verbindung aufbauen
cl.connect("localhost",4949)
#D
#Job abschicken
cl.send( job1 )
#E
#Antwort abholen und in der Variablen "answer" zsammensetzen
#E.1 "answer" ist am Anfang eine leere Zeichenkette
answer = ""
#E.2 Solange nicht Ende der Antwort merken und abholen
while 1:
answer = answer + cl.recv(1024)
if answer[-11:] == "AVANTI:EOR\n":
break
#E.3 Letzte Zeile wegnehmen
answer = answer[:-12]
#F
#Verbindung schliessen
cl.close()
#G
#Antwort anzeigen
print answer
<-------- Ausschneiden -------------------->
Fuer Python gibt es nebenher eine COM / ActivX-Schnittstelle, mit der
sie Python und Delphi integrieren koennen. Waere theoretisch auch von
der CD nehmbar, dabei hat es aber wohl ein Missgeschick gegeben, die
Installationsroutine will Python 1.5.0 und sonst nichts, und schon
garnicht das beigefuegte Python 1.5.1.
Besser man holt sich gleich alles via Internet, aktuell ist eine
Windowsversion 1.5.2 bei der TCL/TK gleich dabei ist.
Nerven zeigen - mit den Window´s-Erweiterungen sinds 7,5 MB ca. 45
Minuten ueber ISDN bei maessiger Verbindung.
Mit freundlichen Gruessen
Volker Bachschneider
Mehr Informationen über die Mailingliste Allegro