Python: 2.7.6.
Som ni sett av ett par trådar så håller jag på att lära mig att skicka data
mellan ett python-script och ett C#-program.
Jag väntar med att göra C#-programmet och har valt att fokusera på python-scriptet först.
Python-scriptet agerar server. För att ansluta till det under testerna så använder jag Putty.
Scriptet körs i Windows "DOS-fönster", dvs cmd.exe.
Cmd kör ascii som teckenkodning som standard och detta har jag inte ändrat.
I Putty har jag testat med främst iso8859-1 men även UTF8 som teckenkodning.
Nu till själva problemet:
Att använda print("test") i Python-scriptet går fint oavsett om jag kör med UTF8 eller iso8859-1 i scriptet.
Dvs: Jag ser ordet 'test' i cmd-fönstret.
Men:
När jag i scriptet lyssnar på data från Putty
och printar ut det i cmd-fönstret så får jag oväntat resultat.
Detta oavsett om jag skrivit något i Putty-fönstret eller ej.
Det här är resultatet i cmd när jag just anslutit men inte skrivit något i Putty-fönstret:
ÿû▼ÿû ÿû↑ÿû'ÿý☺ÿû♥ÿý♥
(Beskrivning, tecken för tecken:
y med två prickar över.
u med ett ^ över.
En ifylld triangel med spetsen nedåt.
y med två prickar över.
u med ett ^ över.
mellanrum
y med två prickar över.
u med ett ^ över.
pil uppåt
osv...)
Jodå, jag ser mönstret (upprepningarna).
Det verkar som att clientsocket.recv() (se koden nedan) inte enbart tar emot
den data man som användare sänder, dvs det jag skriver i Putty-fönstret.
Jag har försökt ta reda på vad detta beror på, bl.a genom att googla på "clientsocket.recv()"
men jag har inte hittat något svar.
Delvis pga att Google är så idiotförklarande att det visar helt andra träffar än det man faktiskt sökte efter...
T.ex träff nr 1 vid sökning på "clientsocket.recv()" : http://docs.python.org/2/library/socket.html
Där nämns inte "clientsocket" överhuvudtaget.
Så i det här fallet är det trial&error från min sida.
Jag har t.ex testat att vända på steken och dekoda datan, men då får jag:
"UnicodeDecodeError: 'utf8' cannot decode byte 0xff in position 2: invalid start byte"
Nuvarande scriptet:
Kod: Markera allt
#!/usr/bin/python
# -*- coding: iso8859-1 -*-
from socket import *
import thread
import sys
print(sys.getdefaultencoding()) #Returnerar "ascii"
#exit()
data = ""
def handler(clientsocket, clientaddr):
print("Server accepted connection from: ", clientaddr)
global data
try:
data = clientsocket.recv(1024) #Det är dessa tre rader
data = data.decode('iso8859-1') #som ger mig felet
#data = data.decode('utf-8')
print(data) #som jag beskriver i inlägget.
if not data:
pass
elif data == "q":
clientsocket.close()
else:
pass
#print(data)
#msg = "You sent me: %s" % data
#clientsocket.send(msg)
except KeyboardInterrupt: # Hanterar nar man trycker CTRL+C for att avbryta
clientsocket.close()
if __name__ == "__main__":
host = '127.0.0.1'
port = 23
buf = 1024
addr = (host, port)
serversocket = socket(AF_INET, SOCK_STREAM)
serversocket.bind(addr)
serversocket.listen(2)
while 1:
print("Server is listening for connections\n")
clientsocket, clientaddr = serversocket.accept()
thread.start_new_thread(handler, (clientsocket, clientaddr))
serversocket.close()
Men jag tar ett steg i taget och ser hur saker uppför sig.
Genom detta kan jag lära mig och då justerar jag efter hand.
Jag vet inte riktigt vad jag ska fråga efter
eftersom jag inte vet exakt vad som är fel.

Någon som kan hjälpa mig att förstå vad som är fel?