Portlistening - Knoten im Kopf

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Hallo Pythons,

ich habe mich mal wieder völlig verfranst. Bei dem Versuch einen Service zu erstellen, der ( später einmal :wink: ) auf einem bestimmten Port lauscht und dann Anfragen einfach zu einem anderen System durchleitet, stoße ich schon in den Grundzügen auf folgendes Problem :

Es würde mir reichen, wenn er mir die Startseite von Google anzeigt. Leider kommen aber nur ein paar Daten an. Hat jemand eine Idee, WO ich hier den Denkfehler mache ?

Danke,
Gunnar

Code: Alles auswählen

# -*- coding: cp1252 -*-

# Bibliothek importieren
from socket import *
import Queue

class portlistening:

    def __init__(self):

        #Queue für die Daten erstellen
        self.dataqueuec = Queue.Queue()
        self.dataqueues = Queue.Queue()

        # Sockets oeffnen
        clients = socket(AF_INET, SOCK_STREAM)
        servers = socket(AF_INET, SOCK_STREAM)
        
    
        # Socket an Port binden
        clients.bind(('', 30000))
        
        # maximal fuenf Verbindungen zwischenpuffern
        clients.listen(5)

        while 1:
            # auf naechste Verbindung warten
            clientsock,addr = clients.accept()
            print "connect from", addr
            servers.connect(("www.google.de", 80))
            if clientsock: break

        while 1:
           
            #Daten vom Client bekommen und in Queue schreiben
            self.recvdatac(clientsock)
            # Daten zum Server schicken
            self.senddatac(servers)
            #Daten vom Server bekommen und in Queue schreiben
            self.recvdatas(servers)
            # Daten zum Client schicken
            self.senddatas(clientsock)

        
    # Funktionen zum Empfangen und Senden der Daten
    def recvdatac(self, conn):
            data = conn.recv(100000)
            self.dataqueuec.put(data, False, -1)

    def senddatac(self, conn):
            data = self.dataqueuec.get(False, -1)
            conn.send(data)

    def recvdatas(self, conn):
            data = conn.recv(100000)
            self.dataqueues.put(data, False, -1)

    def senddatas(self, conn):
            data = self.dataqueues.get(False, -1)
            conn.send(data)

if __name__ == "__main__":
    x = portlistening()
    
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

hallöche,

um an die google-web-site ranzukommen verwendest du am besten die urllib .... damit geht das alles einfacher und es funzt (... es geht auch mit socket, aber da hab ich nicht mehr im kopf wie ....)

mfg cime
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Jo, wenn es nur um Websites gehen würde wäre es ok. Das ist eigentlich nur zum testen. Später sollen Anwendungen darüber laufen können...

Bei weiteren tests habe ich es geschafft heise.de aufzurufen, während Google.de weiterhin nur halb ging.
Ich schätze mal es scheitert unteranderem auch daran, dass die Daten alle zu einem String konvertiert werden.

Gibt es eine Möglichkeit, zwei offene Sockets miteinander zu verbinden ( eben eine klassische Weiterleitung ). Sonst komme ich da nicht weiter :/

Danke, Gunnar
Antworten