最简单的服务器和客户机(python3的编码与解码问题)
在学习python的过程中,我越来越感觉到python2和python3之间有很多不同点,最近发现的一点就是编码问题。
在代码清单14-1和14-2中,因为作者是用python2来写得,然后我是用python3来写得,发现就会出现一些问题。
c.send('Thank you for connecting')
这句代码会出现这样一个错误:
TypeError: a bytes-like object is required, not 'str'
它要求发送的是二进制数据而不是文本数据。
socket.send(bytes[, flags])
socket.recv(bufsize[, flags])
而在python3中,它对于文本数据和二进制数据有着严格的区分,两者不可以混用。经过一番研究,我知道了encode()(编码)和decode()(解码)这两个函数,通过这两个可以实现二进制数据和文本数据之间的转换。

其实简单理解的话,encode()方法就可以将文本数据转换成二进制数据,而decode()方法可以将二进制数据转换成文本数据。
bytes.decode(encoding="utf-8", errors="strict")
str.encode(encoding="utf-8", errors="strict")
这样一来,书上的代码若由python3来实现,可以写成如下形式:
import socket s = socket.socket() host = socket.gethostname()
port = 1234 s.bind((host, port))
s.listen(5)
data = 'Thank you' while True:
print('Wating for connecting:')
c, addr = s.accept()
print('Got connection from', addr)
c.send(('Thank you').encode())
c.close()
import socket s = socket.socket() host = socket.gethostname()
port = 1234 s.connect((host, port))
print(s.recv(1024).decode())
最简单的服务器和客户机(python3的编码与解码问题)的更多相关文章
- 如何为MySQL服务器和客户机启用SSL
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: mysql5.7后有ssl新特性 自己搭建mysql ent ...
- wincc的服务器-客户机模式具体做法(全抄-未测试)
一.原来的工作方式:在同一工作组中4台计算机其windows名分别为A.B.C.D且都已安装好wincc5.0+sp2,原来在每台计算机上运行的均是单用户,4台计算机上实际运行的是一个相同的项目,最先 ...
- python3中编码与解码的问题
python3中编码与解码的问题 ASCII .Unicode.UTF-8 ASCII 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此 ...
- python2和python3的编码encode解码decode函数
python比较坑的一个点:意义完全变了的两个函数 首先 常用的编码方式有3种,utf-8: 常用的传输和存储格式,Unicode的一种简化 Unicode:包括了所有可能字符的国际统一编码 GBK ...
- python3 url编码与解码
在通过浏览器修改数据库时,要对url内容进行编码 quote()编码; unquote()解码; 直接上代码:
- 【计算机网络】 网络体系结构分类: 客户机/服务器体系和P2P
网络体系结构的分类 现代网络应用程序有两种主流的体系结构: 客户机/服务器体系结构和P2P体系结构(peer to peer “对等”) 一 . 客户机/服务器体系结构 客户机/服务器体系 ...
- 基于RDP瘦客户机协议的简要说明
**************************************************************************************************** ...
- 转 python3中SQLLIT编码与解码之Unicode与bytes
#########sample########## sqlite3.OperationalError: Could not decode to UTF-8 column 'logtype' with ...
- RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。
RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大.最高效的方法之一.它为在分布式计算环境中运行的几乎所有应用程序提供基础.本文介绍 RPC 客户机和服务器之间基本的事件流 ...
随机推荐
- javascript常用积累
一.JS动画与动作不一致解决: if(!$( "#handle").is(":animated")){ //判断元素是否处于动画状态 } 二.停止事件冒泡 ev ...
- 转:MD5辅助类
public class MD5Helper { private static MD5 md5 = new MD5CryptoServiceProvider(); private static str ...
- linux下can调试工具canutils安装过程记录
https://www.cnblogs.com/chenfulin5/p/6797756.html 一.下载源码 下载canutils和libsocketcan libsocketcan地址:http ...
- pyqt5 树节点点击实现多窗口切换
# coding=utf-8 import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui ...
- python面向对象三大特性之一继承、多态、封装
继承,即在定义一个类时,以另一个类为参数,则称这个新定义的类继承了参数类,父类又称为基类. 单继承表示只继承一个类,多继承表示继承多个类. class parent1: pass class pare ...
- HTML5<input>标签
在表单中最为核心的就是<input>标签,使用<input>标签可以在表单中定义文本输入框.单选按钮.复选框.重置按钮等,其基本语法格式如下: <input type=& ...
- 01: docker 基本使用
1.1 docker基础 1.docker与虚拟机比较 2.docker版本 1. 社区版(Community Edition, CE) 2. 企业版(Enterprise Edition, EE) ...
- [c/c++] programming之路(5)、吓人小程序、变量、进制等
一.设计一个吓人的东西 首先创建MFC项目(勾选“基于对话框”后点击完成即可) 添加三个按钮 双击按钮进入响应代码段 void CMFCWindowsDlg::OnBnClickedButton1() ...
- topcoder srm 445 div1
problem1 link 这个的结论是只需要考虑坐标是整数或者是整数.5,比如(2.5,3),(4,3.5),(1.5,4.5)这样的时候.这个详细证明起来应该挺麻烦的.这里有一些讨论. probl ...
- topcoder srm 425 div1
problem1 link 暴力搜索即可. problem2 link 可以将每次所有的piece的位置看作一个状态,由于$C_{25}^{5}=53130$,所以最多有这么多状态.这里可以加一些优化 ...