httplib.HTTPConnection.getResponse() bricht ab

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo zusammen,

Grundidee:
- ich sende per Python und HTTP-Post einen Bytestream an den Port xy
- An dem Port xy lauscht ein java programm (class serversocket) und sendet
anschliessend eine Bestätigung
- Auf diese bestätigung soll das Python Programm (in einem thread natürlich..) warten

Problem:
- Die Andwendung funktioniert an sich ganz gut, aber sobald ich eine größere Zahl an Bytes versenden will
schlägt die Methode getResponse() fehl
- An der Post Dateigroesse liegts nicht, über die 124 mb komme ich nicht.
- Momentan uebertrage ich per parameter ca 80 kb in einem file (zipfile als bytes)

Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "...\src\httpRequest\__init__.py", line 40, in <module>
    class MainTest(object):
  File "...\src\httpRequest\__init__.py", line 45, in MainTest
    hFile.httpPost(fileStream)
  File "...\src\httpRequest\__init__.py", line 22, in httpPost
    response = conn.getresponse()
  File "...\Python26\lib\httplib.py", line 974, in getresponse
    response.begin()
  File "...\lib\httplib.py", line 391, in begin
    version, status, reason = self._read_status()
  File "...\lib\httplib.py", line 349, in _read_status
    line = self.fp.readline()
  File "...\socket.py", line 397, in readline
    data = recv(1)
socket.error: [Errno 10053] Eine bestehende Verbindung wurde softwaregesteuert

durch den Hostcomputer abgebrochen
Verwendeter Quellcode(Beispiel Api http://docs.python.org/library/httplib. ... etresponse):

Code: Alles auswählen

        params = urllib.urlencode({'file': fileStream, 'version': '1.0R', 'batch': '1.0.15'})
        headers = {"Content-type": "application/x-www-form-urlencoded",
                    "Accept": "text/plain"}
        conn = httplib.HTTPConnection('localhost',8010,timeout=60000000)
        conn.request("POST", "/cgi-bin/query", params, headers)
        #cgi-bin/query
        response = conn.getresponse()     #<--- Fehler
        conn.close()
        print response.status, response.reason 
Ich hoffe einer kann mir kurz helfen, was ich hier nicht bedenke.
Schonmal vielen dank und Grüße
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Wenn der Server die Socket-Verbindung beendet, liegt es an dem Server. Da wirst du nix in Python machen können. Du schreibst übrigens ServerSocket, redest dann aber von HTTP. Ist das auf der Java-Seite überhaupt ein HTTP-Server? Tomcat oder Jetty haben ein Maximum, was sie so per POST akzeptieren, welches man einstellen kann. Vielleicht es ist das?

Stefan
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo,

danke schonmal für die Antwort.

Im Moment baue ich auf der Java-Seite eine ganz normale Verbindung über sockets auf dem port 80 auf. Extra Server wie TomCat verwende ich bis dato nicht.

Ich erhalte auf der java seite an sich nur Bytes. Ich wer das nochmal genauer unter die lupe nehmen, vielleicht ist beim serversocket wo ein limit.

Danke schonmal für den hinweis über den fehler dann informieren.

Grüße

Stefan
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Irgendwie sollte ich das Arbieten am Freitagen besser einstellen, kommt eh nix dabei raus.
... However, if the application wishes to allow a receive window larger than 64K bytes, as defined by RFC1323 then the proposed value must be set ...
Und genau daran liegt es, zum testen habe ich das mal hochgedreht, macht aber wohl für die Lösung wenig sinn und werde mal nach einer anderen Lösung (wie z.b. den http server von sun ) suchen.

Danke erstmal, war wohl mal wieder reine Blödheit. Aber ich bin ja immer gern für den Zaunpfahl zu haben.

Schönen Tag noch.
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

@Mods

die Uhrzeit ist verstellt, zumindest bei mir geht sie eine Stunde nach.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

rads hat geschrieben:@Mods

die Uhrzeit ist verstellt, zumindest bei mir geht sie eine Stunde nach.
Das wird ein Mod nur mit Glück hier in diesem Thread lesen ;-)

Die Lösung ist, Deine gültige Uhrzeit (Sommerzeit) in den einstellungen einzustellen. Ich habe UTC+2 Stunden - das sollte für dich auch passen, wenn Du in Mitteleuropa lebst.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Nein, neuerdings kannst du UTC + 1 einstellen und dann sagen, dass jetzt Sommerzeit ist. Ist natuerlich die spannende Frage, ob das dann automatisch umgestellt wird. :wink:
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

rads hat geschrieben:Im Moment baue ich auf der Java-Seite eine ganz normale Verbindung über sockets auf dem port 80 auf. Extra Server wie TomCat verwende ich bis dato nicht.
Dir ist schon bewusst, dass das HTTP-Protokoll (insbesondere Version 1.1) nicht trivial zu parsen ist? Tue dir einen Gefallen, und versuche das nicht selbst. Jetty ist ein kleiner aber feiner Servlet-Container, der dir erlaubt, gegen das Standard-Servlet-API zu programmieren. Dann klappt es bestimmt auch mit der Kommunikation mit Python.

Stefan
Antworten