先看一段代码

#!/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. 小程序 公众号/h5相互跳转-webview

    小程序与h5的跳转 前提小程序管理后台配置域名白名单,并且h5页面是嵌在小程序里面(相互跳的前提条件) 在业务域名中设置好访问的h5地址 微信官方web-view 介绍地址 https://devel ...

  2. P1113 杂务 拓扑排序

    题目描述 John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务完成是必要的,因为 ...

  3. 展开被 SpringBoot 玩的日子 《 六 》 整合 Mybatis

    上次整合了JPA ,但是很多人觉得JPA 并不是那么好用,这都是习惯问题,我本人也比较习惯Mybatis ,所以,今天就整合一下Mybatis,到网上找了一下关于spring boot和mybatis ...

  4. Android常规布局方式和方法

    一.关于给控件添加ID属性 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xm ...

  5. vue 学习小记

    vue 中有 data() .computed.methods.beforeRouteLeave.created等 具体的: data():定义一些文件中需要用到的变量,data中带return,是使 ...

  6. Ecust OJ

    1 #include <bits/stdc++.h> using namespace std ; struct bigInt { ] ; int size ; ; private : vo ...

  7. HTMl、CSS、JS的区别:

    HTMl.CSS.JS的区别: Html:决定网页的结构和内容----[结构] Css:控制页面的表现样式,如:美化页面----[表现] Js:控制网页的行为,如:给页面加动态的效果----[行为]

  8. 201771010126 王燕《面向对象程序设计(Java)》第十周学习总结

    实验十  泛型程序设计技术 实验时间 2018-11-1 1.实验目的与要求 (1) 理解泛型概念: 泛型:也称参数化类型(parameterized type),就是在定义类.接口和方法时,通过类型 ...

  9. 我用linux系统的采坑记

    我的新Ubuntu18,也没安装什么,但是在使用过程中总是莫名其妙的卡死,真的很烦.有时候cpu使用率接近100%,有时候貌似是内存不够了,但是我明明是8GB,这些小问题搞得我很恼火.这样的机器真的不 ...

  10. php调用第三方接口

    方式一 $url = 'http://ip.taobao.com/service/getIpInfo.php?ip='.$realip;$data = file_get_contents(" ...