Telnet Response verarbeiten mittels sockets

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
rolfi
User
Beiträge: 1
Registriert: Mittwoch 14. März 2012, 17:20

Hallo Python Community!

ich würde mich gerne ein wenig mehr mit Sockets beschäftigen und hab mir dazu ein kleines Beispiel ausgedacht. Leider funkioniert das nicht so, wie ich gerne hätte. (Also zuerst: Es läuft auf meinem Rechner auch ein Socketserver, welcher einfach vier (unsigned) integer schickt).

Dieses Script soll nun die int's annehmen und umgedreht zurückschicken. Leider hatte ich dabei von Anfang an Probleme, was zB die while-Schleife aussagt. Ohne diese kommt nur ein Teil des Strings an, womit wir beim nächsten Problem wären: Beim Annehmen der Daten werden diese als String interpretiert, anstatt als integer...

Vielleicht kann mir ja jemand helfen... Danke :)

Code: Alles auswählen

import sys
import socket

try:
    host = "127.0.0.1"
    port = 50007
    i=0
    s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
    s.settimeout(10)
    s.connect((host, port))
    while i<2:
		response = s.recv(4)
		rev_resp = response[::-1]
		s.send(rev_resp)
		response_2 = s.recv(8192)
		print response
		print response_2
		i+=1

except socket.error, msg:
   print "An error occurred:", msg

else:
   print "Connection was opened"
   
s.close()
Zuletzt geändert von rolfi am Mittwoch 14. März 2012, 19:26, insgesamt 1-mal geändert.
deets

Bitte zeig uns auch den dazugehoerigen Server, damit wir abschaetzen koennen, was du *wirklich* ueber die Leitung schickst.

Ausserdem ist klar, dass die Ergebnisse strings sind - woher soll Python wissen, was da ueber die Leitung kommt? Das einzige, was sockets koennen, sind Bytes zu verschicken. Das war's. Und die kommen nunmal an als strings in Python 2.x.

Es fehlt ausserdem ein Protokoll. Dafuer gibt es verschiedenste Ansaetze. Man kann zB mit Escapes arbeiten, und eigentlich immer (ausser man verwendet feste Paketlaengen fuer definierte Kommandos) mit einer Moeglichkeit, die Laenge des zu lesenden contents mitzuschicken. Oder man arbeitet mit magic numbers, von denen garantiert ist, dass sie in den Nutzdaten so nicht vorkommen.
Antworten