python 网络通信库_Python标准库——文件系统

Unicode数据和网络通信

不同于标准输入和输出流,网络套接字是字节流,默认情况下不支持编码。因此,如果程序希望通过网络发送或接收Unicode数据,那么在将数据写至一个套接字之前必须先将数据编码为字节。下例中的服务器会把接收到的数据回送给发送者。

新建codecs_socket_fail.py文件。

import sys

import socketserver

class Echo(socketserver.BaseRequestHandler):

def handle(self):

data = self.request.recv(1024)

self.request.send(data)

return

if __name__ == '__main__':

import codecs

import socket

import threading

address = ('localhost', 0)

server = socketserver.TCPServer(address, Echo)

ip, port = server.server_address

t = threading.Thread(target=server.serve_forever)

t.setDaemon(True)

t.start()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((ip, port))

text = 'français'

len_sent = s.send(text)

response = s.recv(len_sent)

print(repr(response))

s.close()

server.socket.close()

以上代码输出结果为:

Traceback (most recent call last):

File "codecs_socket_fail.py", line 43, in

len_sent = s.send(text)

TypeError: a bytes-like object is required, not 'str'

以上代码,可以在每个send()调用之前对数据显示编码,不过如果少一个send()调用,则会导致编码错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值