最简单的服务器和客户机(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 客户机和服务器之间基本的事件流 ...
随机推荐
- 在MyEclipse中使用javadocAPI文档
开始啦 1.打开MyEclipse,选中要导出的项目,右击Exprot弹出窗口,选择java----javadoc点击next到下一界面. 2.选出要导出的项目或要添加的项目,在browse中选择路径 ...
- Qt Dll总结(二)——创建及使用Qt的Dll(转载)
先讲一下对QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法 2.显示链接DLL,调用DLL中类对象.成员函数.(通过对象即可实现类成员函数 ...
- Kattis之旅——Factovisors
The factorial function, n! is defined thus for n a non-negative integer: 0! = 1 n! = n * (n-1)! (n & ...
- oracle 12cR2 smart flash cache实测
最近一直在处理新系统的性能优化问题,这两天特地测试了下oracle 11gR2开始引入的smart flash cache. 其介绍参考MOS文档,How To Size the Database S ...
- Linux CentOS 7的图形界面安装(GNOME、KDE等)
转载于:https://jingyan.baidu.com/article/0964eca26fc3b38284f53642.html 今天为大家介绍一下CentOS 7的图像界面安装(虚拟机和硬盘安 ...
- Python爬虫(一)——豆瓣下图书信息
爬虫目的: 随着近年互联网的发展,网络上的信息飞速数量增长.在庞大的数据面前想要获得期望的信息往往如同大海捞针.通过合理的筛选,在百万甚至数亿计的数据中找到所需信息,无疑有着非常大的意义. 在豆瓣网下 ...
- SQL server无法连接上服务器的相关问题
安装MySql以后,SQL server突然就连接不上服务器了,问了老师,说是啥进程关闭了,都打开了也没搞好,都准备重装了,结果看到度妈上面的一篇文献,原来是SQL server MSSQLSERV ...
- bzoj 2844 albus就是要第一个出场 - 线性基
题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 给定集合$S$,现在将任意$A\subseteq S$中的元素求异或和,然后存入一个数组中(下标从1开始),然后从小到大排 ...
- SVM学习笔记1-问题定义
问题定义: 给出一些样本,包含两类.svm试图找到一个超平面,将数据分开,并且每种样本到超平面的距离的最小值最大. 输入样本:$\{x_{i},y_{i}| 1\leq i\leq n \}$,$y_ ...
- C# 反射小结
废话不多说,直接上代码. 1.typeof(类名):它是一个运算符 eg_1:Type type = typeof(int) ; eg_2:public class Student { Type ty ...