python recv_关于Python3.5中recv()的疑问

一段代码:

import argparse

import socket

import sys

from binascii import hexlify

def main():

# setup argument parsing

parser=argparse.ArgumentParser(description='Socket Error Examples')

parser.add_argument('--host',action='store',dest='host',required=False)

parser.add_argument('--port',action='store',dest='port',type=int,required=False)

parser.add_argument('--file',action='store',dest='file',required=False)

given_args=parser.parse_args()

host=given_args.host

port=given_args.port

filename=given_args.file

# First try-except block -- create socket

try:

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

except socket.error as err_msg:

print('Error creating socket: %s' %err_msg)

sys.exit(1)

# Second try-except block -- connect to given host/port

try:

s.connect((host,port))

except socket.gaierror as err_msg:

print('Address-related error connecting to server: %s' %err_msg)

sys.exit(1)

except socket.error as err_msg:

print('Connection error: %s' %err_msg)

sys.exit(1)

# Third try-except block -- sending data

try:

s.sendall(bytes('GET %s HTTP/1.1\r\n\r\nHost:%s' %(filename,host),'utf8'))

except socket.error as err_msg:

print('Error sending data: %s' %err_msg)

sys.exit(1)

while 1:

# Fourth try-except block -- waiting to receive data from remote host

try:

buf=s.recv(2048)

except socket.error as err_msg:

print('Error receiving data: %s' %err_msg)

sys.exit(1)

if not len(buf):

break

# write the received data

sys.stdout.write(buf.decode('utf-8'))

s.close()

if __name__ == '__main__':

main()

如果这段写成:

sys.stdout.write(buf)

无法正确将收到的html文件在浏览器中解析

但是写成:

sys.stdout.write(buf.decode('utf-8'))

又会提示:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2047: unexpected end of data

请问,在Python3.5中,recv()得到的内容如何正确处理并输出?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值