zoukankan      html  css  js  c++  java
  • socket编程: TypeError: must be bytes or buffer, not str

    先看一段代码

    #!/usr/bin/env python3
    
    from socket import *
    
    serverName = "10.10.10.132"
    serverPort = 80
    
    clientSocket = socket(AF_INET, SOCK_STREAM)
    
    clientSocket.connect((serverName, serverPort))
    
    clientSocket.send("GET / HTTP/1.1
    Host: 10.10.10.132
    
    ")
    
    response = clientSocket.recv(4096)
    
    print(response)
    
    clientSocket.close()
    
    

    在命令行中执行会出错,显示 TypeError: must be bytes or buffer, not str,错误在 clientSocket.send("GET / HTTP/1.1 Host: 10.10.10.132 ")这一行。
    意思是send的这个字符串格式错误,应该是字节或者缓冲区(差不多是这个意思吧?)。
    google一下,看看stackoverflow:

    翻译一下:这个问题就是python2与python3的区别之一,在python2中,send发送的string可以被当做'bytes',但是在python3中string就是string,bytes就是bytes,在调用send方法时,必须转换成字节(bytes)。
    那如何将string转换成byte呢?
    两种方法:
    1.在字符串前加一个b,表示将字符串以bytes方式输出,即:b"This is a string"。
    2.使用encode()方法

    还有一种方法不推荐,就是使用python2的环境:将文件首部的#!/usr/bin/env python3改成#!/usr/bin/python

    现在知道问题所在了,把出错的那一行改成clientSocket.send(b"GET / HTTP/1.1 Host: 10.10.10.132 "),或者clientSocket.send("GET / HTTP/1.1 Host: 10.10.10.132 ".encode())

    enter, 运行。

    搞定

    那个stackoverflow链接:https://stackoverflow.com/questions/2411864/python-socket-send-buffer-vs-str

  • 相关阅读:
    zabbix server监控本机agent
    虚拟机添加配置双网卡linux
    linux改变默认运行级别
    linux重置root密码
    vi文本编辑器
    centos7 mysql安装和基本操作yum安装
    安装wordpress个人网站
    httpd安装与配置(centos7) 2
    httpd安装与配置(centos7)
    Mac升级Python3
  • 原文地址:https://www.cnblogs.com/litlife/p/7768840.html
Copyright © 2011-2022 走看看