Problem von Netzwerkkommunikation mit TPowersock



  • ich benutze TPowersock für die Netzwerkkommunikation. Bei einigen Computern kommt es zu fehlerhaften Übertragung des Datenstromes. Ich beziehe von unserem Provider einen komprimierten Datenstrom, der durch die Zlib Komponente entpackt wird. Bei Netzwerkarten des Typs via kommt es zu Problemen bei der Darstellung der Datenströme. Bei Netzwerkarten des Typs RealTek kommt es hingegen zu keinen Fehlern. Der Fehler tritt bei Chipsätzen des Typs via/3com auf und ist von sporadischer Natur.

    Kann die Komponente TPowersock an dieser Sache schuld sein ?
    Kann eine fehlerhafte Komprimierung vorliegen (crc), ich habe schon unterschiedliche zlib benutzt.
    Hat jemand eine idee ? Danke!



  • Fährst du irgend ein eigenes Protokoll oder garnix?

    -junix



  • Mit dem Method Transaction() von TPowersock sende ich die XML-Anfragen zu einem laufenden PHP-Programm, und anschließend erhalte ich die Antwort als die komprimierten Datenstrom vom selben PHP-Programm. Normalerweise läuft es einwandfrei, nur bei den jenige, die die Netzkarten von SMC/VIA/3COM unter Windows 2000 verwenden (realTek funktioniert) , taucht das Problem auf, bzw. ich habe mit der gleichen Netzwerkkarte unter andere Betriebssystem z.B. Window XP versucht, läuft es ohne Problem.

    Was kann der Grund sein?
    😕 😕 😕



  • Das läuft in dem Fall über HTTP?



  • Nein, es läuft über Socket.
    Ich habe gerade auch mein Code geguckt, das genaue Komponente, das ich benutze, ist TNMHTTP. TNMHTTP ist direkt Subclass von TPowersock.



  • Also läufts doch über HTTP...

    Merkwürdig... abgesehen davon, dass ich schon mehrfach gehört habe die NetMasters Kompos (NM) seien schrott wüsste ich da jetzt nichts dazu. Wie empfängst du denn den Datenstrom? Von welchen Mengen reden wir denn hier?



  • kannste nicht ein crc von dem datenstrom machen und den zuerst schicken und auf der anderen seite prüfst du den datenstrom und vergleichts ihn mit dem crc? wenn es unterschiede gibt, dann lässte das ganze nochmal senden.



  • Sunday schrieb:

    kannste nicht ein crc von dem datenstrom machen und den zuerst schicken und auf der anderen seite prüfst du den datenstrom und vergleichts ihn mit dem crc? wenn es unterschiede gibt, dann lässte das ganze nochmal senden.

    Naja, ich glaube nicht, dass es wirklich an Netzwerkkarten oder sowas liegt... die Ursache vermute ich in der Empfangsroutine. Ausserdem macht ja ZIP selber ne CRC über seinen Datenstrom, von dem her wäre es eine unnötige Redundanz...

    Und selbst wenn es anders wäre, wäre es lediglich eine Symptombekämpfung.

    -junix



  • Meistens läuft das Programm ohne Problem, und nur bei wenigen Netzwerkkarten unter Windows2000 kommt das Problem. Ich mache gerade vielen Hardwaretesten 😃 , um den Grund herauszufinden.
    Ich melde mich noch



  • fubin_22527 schrieb:

    Ich mache gerade vielen Hardwaretesten 😃 , um den Grund herauszufinden.

    Macht dir Symptombekämpfung spass? LIest du überhaupt was ich schreibe?

    -junix



  • Auf einem Computer unter Win2K habe ich drei Netzwerkkarten installiert. Nur mit der Netzwerkkarte der SMC läuft das Programm nicht richtig. Ich habe die originalen unkomprimierten Datenströme verglichen, und sie sind schon unterschiedlich gerade nach dem Empfang direkt aus dem PHP-Programm. Strange!! 😕 😕 😕

    Irgendwie läuft der Method Tranaction() von TPowersock nicht richtig. Ich habe versucht, Read() und ReadLn() statt Tranaction() (allen von TPowersock) zu verwenden, leider läuft es sehr oft nicht, wenn die Datenströme zu groß sind. TPowersock ist echt keine perfekte Komponente.

    Ich denke auch, das Problem liegt an meinem Programm. Vielleicht soll ich eine andere Komponente statt TNMHTTP(TPowersock) für Kommunikation mit Socket verwenden. Hat jemand Vorschläger?

    Vielen Dank für so viele Antworte!



  • junix schrieb:

    Wie empfängst du denn den Datenstrom? Von welchen Mengen reden wir denn hier?



  • String TF_Main::connect(String request)
    {
        String response = "";
        try                                         
        {
            iniPowersockConnection();
            ...
    
            while (1)
            {
                line = NMHTTP1->Transaction(request);
    	   // Responses are received line by line i.e. Transaction() has to be used several times until end of communication 
                ...
    	   ...
    	   // 
                if (transaction finished)
                    break;
            }
        } catch (...)
        {
    	...
        }
        return response;
    }
    

    Mein Code sieht so ähnlich wie oben gezeigt aus. Was komisch ist dass diese Method nur bei wenigen Computer nicht funktioniert.
    Zum Testen suche ich eine andere Komponente für Kommunikation mit Socket. Hat jemand vorschläger? Danke



  • Ich habe gar keine Schläger... (o;

    Versuchs mal mit dem Indy-Paket...

    -junix


Anmelden zum Antworten