Seite 1 von 1

Kodierungsarten

Verfasst: Freitag 8. Juni 2007, 12:58
von sg_pyth
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()

Verfasst: Freitag 8. Juni 2007, 13:35
von Costi
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

Verfasst: Freitag 8. Juni 2007, 14:05
von 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.

Verfasst: Freitag 8. Juni 2007, 14:11
von Sr4l
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

Verfasst: Mittwoch 4. Juli 2007, 15:43
von sg_pyth
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.