Python 3.X 与 2.X 的恩怨情仇 (一)

来源:互联网 发布:mac面对面快传 编辑:程序博客网 时间:2024/05/17 07:23

Python 3.X 与 2.X 的恩怨情仇 (一)

闲来用python socket写了一对简单的服务端与客户端
三下五除二的搞定后,兴高采烈的开始尝试
熟练的打开CMD 敲下python Client.py和python Server.py

这似曾相识的错误 到底是什么呀喂!!!
于是查看代码
Client.py

import sockets = socket.socket()host = socket.gethostname()port = 1234s.connect((host,port))print(s.recv(1024))s.close()

Server.py

import sockets = socket.socket()host = socket.gethostname()port = 1234s.bind((host,port))s.listen(5)while True:    c, addr = s.accept()    print('链接地址:',addr)    c.send('Welcom!!')    c.close()

根据错误的提示我们锁定Serve.py的第14行:
c.send('Welcom!!')
怎么看都不像错的啊喂!!!

去求助万能度娘发现:
can’t use a string pattern on a bytes-like object的原因是:

3.x现在的参数更改了,现在读取的是bytes-like的,但参数要求是chart-like的。

解决方法:
1. 在str前面加一个小b,表示要操作的对象是bytes型。
2. bytes(str,encoding=”utf-8”)
总而言之就是要将str类型的对象转换为bytes类型
c.send(b'welcome!!!')
c.send(bytes('welcome!!!',encoding="utf-8"))

这两种修改方式都可以让服务端成功发送数据
客户端成功接收

socket.send()的输入参数是需要bytes,在python2.x中支持str,所以在我们使用3.x平台时候需要将其转化为bytes

2 0
原创粉丝点击