Kodierungsarten

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
sg_pyth
User
Beiträge: 10
Registriert: Montag 28. Mai 2007, 11:54

Hallo Leute,

ich möchte Daten von einer SPS (Speicherprogrammierbare Steuerung) zum PC schicken. Dabei verwende ich den unten stehenden Code. Wenn ich probeweise ein String mit dem Inhalt Hallo schicke, dann kommt am PC folgendes an: '/xfe/x05'. Anscheinend kann Python die Kodierung nicht interpretieren. Weiß jeman zufällig welche Kodierungsart das ist.

Für Eure Hilfe wäre ich sehr dankbar.

Code: Alles auswählen


#! /usr/bin/env python
# -*- encoding: latin1 -*-

# Dieser TCP-Server sendet alle Daten, die er empfängt an den
# Client als Antwort zurück

from socket import *

# Der standard Echo Port ist nicht sehr nützlich, da er root
# Rechte erfordert. Wir nehemen den Port 50007
ECHO_PORT = 2000
BUFSIZE = 1024
def main():
# TCP-Socket erstellen und an Port binden
    s = socket(AF_INET, SOCK_STREAM)
    f = file('C:\\gedicht.txt', 'a')
    print "Socket initiert"
    x = gethostname()
    print x
    y = gethostbyname(x)
    print y
    s.bind(('', ECHO_PORT))
    s.listen(1)
    print "Server gestartet"
    # Warte auf eine Verbindung zum Server
    conn, (remotehost, remoteport) = s.accept()
    print 'Verbunden mit %s:%s' % (remotehost, remoteport)

    while 1:
        # Empfange daten vom Client
        data = conn.recv(BUFSIZE)
        print "Echo:" + repr(data)
        print type(data)
        f.write(repr(data))
        f.write('\n')
        if not data:
                # Die Verbindung wurde getrennt
                # Abbruch
                break

    # Sende die Daten zurück zum client
    #conn.send(data)
    # Socket schließen
    s.close()
    f.close()
    print('Verbindung beendet')
if __name__ == '__main__':
    main()
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

NACHTRAG:
der folgende beitrag ist schrott, weis selber nich wie ich drauf gekommen bin
BITTE UEBERLESEN ;-)


das sind auch noch ein par kleinere bugs drin....
in zeile 33 meinst du wohl ``+=`` statt ``=``, du willst ja nicht nur den letztedn chunk

und deine abbruchbedingung ist auch falsch:
sobalt etwas empfangen wurde gelangst du in einer endlosschleife
du musst nur gucken ob dein letzter chunk kein ``""`` ist

ich wuerde an deiner stelle auch immer in einen loop ``accept``en
Zuletzt geändert von Costi am Freitag 8. Juni 2007, 14:10, insgesamt 2-mal geändert.
cp != mv
BlackJack

@Costi: So wie's da steht mach es schon Sinn, die Daten werden ja sofort ausgegeben und nicht in `data` gesammelt.

@sg_pyth: Die Daten die Ankommen sind '\xfe\x05' und das sind nur zwei Bytes, es ist also *sehr* unwahrscheinlich, dass das eine Zeichenkette mit 5 Buchstaben darstellen soll. Egal in welcher Kodierung.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ich würde sagen das das Gerät HEX oder Binär schreibt
Aber leider ergibt "FE 05" keine Sinn.

Code: Alles auswählen

>>> "hallo".encode('HEX')
'68616c6c6f'
>>> 
5Buchstaben müssten schon ne lange Zeichenketteliefern
sg_pyth
User
Beiträge: 10
Registriert: Montag 28. Mai 2007, 11:54

Hallo Leute,

hier ist die richtige Antwort:

Bei '\x' handelt es sich um ein Maskierungszeichen. Danach wird der Wert eines Bytes hexadezimal dargestellt.

Grüsse,
sg.
Antworten