2014-09-15 6 views
0

У меня есть код ниже, который я пытаюсь запустить с помощью интерпретатора python3.2.Нужна помощь в Python3

import socket #for sockets 
import sys #for exit 
#from UserString import MutableString 

#create an INET, STREAMing socket 
try: 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
except socket.error: 
    print ('Failed to create socket') 
    sys.exit() 

print ('Socket Created') 

host = 'www.google.com'; 
port = 80; 

try: 
    remote_ip = socket.gethostbyname(host) 

except socket.gaierror: 
    #could not resolve 
    print ('Hostname could not be resolved. Exiting') 
    sys.exit() 

#Connect to remote server 
s.connect((remote_ip , port)) 

print ('Socket Connected to ' + host + ' on ip ' + remote_ip) 

#Send some data to remote server 
message = "GET/HTTP/1.0\r\n\r\n" 

try : 
    #Set the whole string 
    s.sendall(message.encode()) 
except socket.error: 
    #Send failed 
    print ('Send failed') 
    sys.exit() 

print ('Message send successfully') 

#Now receive data 

messageParts = [] 
remaining = 4096 
chunk = s.recv(remaining) 
messageParts.append(chunk) 

while (len(chunk) > 0): 

    chunk = s.recv(remaining) 
    messageParts.append(chunk.decode()) 

finalMessage = b"".join(messageParts) 

print('Printing the html contents ...') 
print(finalMessage) 

После выполнения кода, с питона версии 3.2, я получаю ошибку ниже:

Socket Created 
Socket Connected to www.google.com on ip 74.125.201.147 
Message send successfully 
Traceback (most recent call last): 
    File "TestMainServerV2.py", line 73, in <module> 
    finalMessage = b"".join(messageParts) 
TypeError: sequence item 1: expected bytes, str found 

Может кто-нибудь, дайте мне знать, что это проблема?

Спасибо!

ответ

0
messageParts.append(chunk.decode()) 

является добавление str с до messageParts.

chunk = s.recv(remaining) 
messageParts.append(chunk) 

является добавление bytes к messageParts. (Все, что приходит через сокет является bytes так chunk является объектом bytes.)

Особенно в Python3, никогда не следует смешивать с и strbytes.

b"".join(messageParts) 

поднимает TypeError, поскольку b"".join ожидает только bytes.


Вы можете избежать ошибки, не расшифровки chunk. Используйте

messageParts.append(chunk) 

вместо

messageParts.append(chunk.decode()) 
+0

спасибо за Ваш ответ. Не могли бы вы сообщить мне, как я могу исправить вышеуказанный код? –