先看一段代码

#!/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\r\nHost: 10.10.10.132\r\n\r\n") response = clientSocket.recv(4096) print(response) clientSocket.close()

在命令行中执行会出错,显示 TypeError: must be bytes or buffer, not str,错误在 clientSocket.send("GET / HTTP/1.1\r\nHost: 10.10.10.132\r\n\r\n")这一行。

意思是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\r\nHost: 10.10.10.132\r\n\r\n"),或者clientSocket.send("GET / HTTP/1.1\r\nHost: 10.10.10.132\r\n\r\n".encode())

enter, 运行。

搞定

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

socket编程: TypeError: must be bytes or buffer, not str的更多相关文章

  1. 【爬坑】Python 3.6 在 Socket 编程时出现类型错误 TypeError: a bytes-like object is required, not 'str'

    1. 问题描述 Python 3.6 在 Socket 编程时出现错误如下 Traceback (most recent call last): File "F:/share/IdeaPro ...

  2. Java网络编程学习A轮_07_基于Buffer的Socket编程

    示例代码: https://github.com/gordonklg/study,socket module A. LineSeparate 基于 Buffer 实现逐行读取的 EchoServer ...

  3. 最基础的Python的socket编程入门教程

    最基础的Python的socket编程入门教程 本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在 ...

  4. c#socket编程基础

    Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类 ...

  5. linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解

    最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展, ...

  6. Websocket和PHP Socket编程

    本来是搜一些html5 websocket资料看的,结果被引去看了php的socket编程.下面是一些简单的例子,在命令行运行php脚本就行 [命令行运行PHP]PHP中有一个php.exe文件,可以 ...

  7. 如何为可扩展系统进行Java Socket编程

    从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...

  8. 02--Java TCP Socket编程

    一.基础知识 1. TCP状态转换知识,可参考: http://www.cnblogs.com/qlee/archive/2011/07/12/2104089.html 2. TCP/IP五层模型   ...

  9. <转>Go语言TCP Socket编程

    授权转载: Tony Bai 原文连接: https://tonybai.com/2015/11/17/tcp-programming-in-golang/ Golang的主要 设计目标之一就是面向大 ...

随机推荐

  1. C&C++ Calling Convention

    tkorays(tkorays@hotmail.com) 调用约定(Calling Convention) 是计算机编程中一个比较底层的设计,它主要涉及: 函数参数通过寄存器传递还是栈? 函数参数从左 ...

  2. IntelliJ IDE 基础经验备案

    1.配置本地的JAVA环境 2.配置本地安装的Maven环境 详情 1.配置本地的JAVA环境 准备: 本地已经安装java环境,目录:C:\Program Files\Java\jdk1.8.0_1 ...

  3. JAVA注释--2019-04-28

    一.JAVA自带注解 1.@Override:覆盖父类方法 2.@Deprecated:不建议使用(就是方法上画一条横线划掉那种) 3.@SuppressWarnings:去掉警告:使用方法:@Sup ...

  4. 安装VUE Cli3 框架方法

    下面为大家介绍一下怎样安装  VUE Cli3的步骤 官网地址  https://cli.vuejs.org/zh/guide/installation.html 一.首先要检查一下是否安装node环 ...

  5. 大数加法~HDU 1002 A + B Problem II

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1002 题意: 数学题,A+B; 思路,这个数非常大,普通加法一定会超时,所以用大数加法.大数加法的基 ...

  6. BZOJ5335 : [TJOI2018]智力竞赛

    二分答案,转化成求最少的路径,覆盖住所有权值$\leq mid$的点. 建立二分图,若$i$的后继为$j$,则连边$i\rightarrow j$,求出最大匹配,则点数减去最大匹配数即为最少需要的路径 ...

  7. Oracle事务与锁 知识点摘记

    事务:事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功要么全部失败. 说明:一组SQL,一个逻辑工作单位,执行整体修改或者整体回退. 事务的相关概念: 1.事务的提 ...

  8. ES8 async/await语法

    Async/await的主要益处是可以避免回调地狱(callback hell)问题 Chromium JavaScript引擎 从v5.5开始支持async/await功能,Chromium Jav ...

  9. 771. Jewels and Stones

    You're given strings J representing the types of stones that are jewels, and S representing the ston ...

  10. K8S 安装 Wordpress

    基本概念 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共享和使用为Kubernetes构建的应用,它包含几个基本概念 Helm是目前Kubernetes服务编排领域的唯一 ...