Python学习笔记
来源:互联网 发布:思科show mac 编辑:程序博客网 时间:2024/05/17 23:27
socket
socket包提供了底层的socket操作,可以用来构建TCP、UDP服务器和客户端。需要注意的是,python3 中 socket 发送和接收的数据都是 utf-8 编码。
TCP
服务器
#coding=utf-8import socketimport timeHOST = '' # 空表示bind绑定任何可用的地址,比如多网卡时,可以接收到发送给任何一个网卡的数据PORT = 21567 BUFSIZ = 1024# 1. 创建socketwith socket.socket(socket.AF_INET, socket.SOCK_STREAM) as tcpSerSock: # 2. 绑定地址 tcpSerSock.bind((HOST, PORT)) # 3. 监听 tcpSerSock.listen(5) while True: print('waiting for connection...') # 4. accept socket tcpCliSock, addr = tcpSerSock.accept() print('...connected from:', addr) # 5. 用第4步返回的 socekt 与客户端进行接收、发送数据 with tcpCliSock: while True: data = tcpCliSock.recv(BUFSIZ) if not data: break tcpCliSock.send(bytes('[%s] %s' % (time.ctime(), str(data, encoding="utf8")), encoding="utf8"))
客户端
#coding=utf-8import socketHOST = '127.0.0.1' # or 'localhost'PORT = 21567BUFSIZ = 1024# 1. 创建 sockettcpCliSock = socket(AF_INET, SOCK_STREAM)with tcpCliSock: # 2. 连接 tcpCliSock.connect((HOST, PORT)) # 3. 发送、接收数据 while True: data = input('> ') if not data: break tcpCliSock.send(data.encode('utf8')) data = tcpCliSock.recv(BUFSIZ) if not data: break print(data.decode('utf8'))
UDP
服务器
#coding=utf-8import socketimport timeHOST = ''PORT = 21567BUFSIZ = 1024# 1. 创建 socketwith socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as udpSerSock: # 2. 绑定地址 udpSerSock.bind((HOST, PORT)) # 3. 接收、发送数据 while True: print('waiting for message...') data, addr = udpSerSock.recvfrom(BUFSIZ) udpSerSock.sendto(bytes('[%s] %s' % (time.ctime(), str(data, encoding='utf8')), encoding='utf8'), addr) print('...received from and returned to: ', addr)
客户端
#coding=utf-8import socketHOST = 'localhost'PORT = 21567BUFSIZ = 1024# 1. 创建 socketwith socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as udpCliSock: # 2. 发送、接收数据 while True: data = input('> ') if not data: break udpCliSock.sendto(data.encode('utf8'), (HOST, PORT)) data, ADDR = udpCliSock.recvfrom(BUFSIZ) if not data: break print(data)
socketserver
TCP
服务器
#coding=utf-8import socketserverimport timeHOST = ''PORT = 21567# 1. 创建 RequestHandler# 1.1 继承 socketserver.StreamRequestHandlerclass MyRequestHandler(socketserver.StreamRequestHandler): # 1.2 重写 handle 以处理请求 def handle(self): print('...connected from:', self.client_address) # socketserver.StreamRequestHandler 将输入和输出视为 file-like 对象 # 因此这里使用 readline() 和 write() 来读和写数据 # 注意在发送数据时,必须在最后加上回车换行,这里直接使用客户端发送过来的 # 回车换行,因此不必再加上了 self.wfile.write(('[%s] %s' % (time.ctime(), self.rfile.readline().decode('utf-8'))).encode('utf-8'))# 2. 创建 socketserver.TCPServerwith socketserver.TCPServer((HOST, PORT), MyRequestHandler) as tcpServ: print('waiting for connection...') # 3. 运行服务器 tcpServ.serve_forever()
客户端
#coding=utf-8import socketHOST = 'localhost'PORT = 21567BUFSIZ = 1024# 由于 socketserver 每次处理请求之后都会关闭连接,因此如果要多个请求,需要连接多次# 这里用 while True 建立多次连接,直到用户输入空退出while True: # 1. 创建 socket with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as tcpCliSock: # 2. 连接 tcpCliSock.connect((HOST, PORT)) data = input('> ') if not data: break # 3. 发送、接收数据,注意发送数据时必须加 \r\n tcpCliSock.send(('%s\r\n' % data).encode('utf-8')) data = tcpCliSock.recv(BUFSIZ) if not data: break print(data.decode('utf-8').strip())
UDP
服务器
#coding=utf-8import socketserverimport timeHOST = ''PORT = 21567# 1. 创建 RequestHandler# 1.1 继承 socketserver.DatagramRequestHandlerclass MyRequestHandler(socketserver.DatagramRequestHandler): # 1.2 重写 handle 以处理请求 def handle(self): print('...connected from:', self.client_address) # socketserver.DatagramRequestHandler 将输入和输出视为 file-like 对象 # 因此这里使用 readline() 和 write() 来读和写数据 # 注意在发送数据时,必须在最后加上回车换行,这里直接使用客户端发送过来的 # 回车换行,因此不必再加上了 self.wfile.write(('[%s] %s' % (time.ctime(), self.rfile.readline().decode('utf-8'))).encode('utf-8'))# 2. 创建 socketserver.UDPServerwith socketserver.UDPServer((HOST, PORT), MyRequestHandler) as udpServ: print('waiting for connection...') # 3. 运行服务器 udpServ.serve_forever()
客户端
#coding=utf-8import socketHOST = 'localhost'PORT = 21567BUFSIZ = 1024# 由于 socketserver 每次处理请求之后都会关闭连接,因此如果要多个请求,需要连接多次# 这里用 while True 建立多次连接,直到用户输入空退出while True: # 1. 创建 socket with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as tcpCliSock: data = input('> ') if not data: break # 2. 发送、接收数据,注意发送数据时必须加 \r\n tcpCliSock.sendto(('%s\r\n' % data).encode('utf-8'), (HOST, PORT)) data, ADDR = tcpCliSock.recvfrom(BUFSIZ) if not data: break print(data.decode('utf-8').strip())
阅读全文
1 0
- 【python】:python学习笔记
- Python学习笔记-Python起步
- Python学习笔记-Python基础
- Python学习笔记-Python对象
- Python基本概念--Python学习笔记
- Python学习笔记:Python函数
- python学习笔记-python安装
- Python学习笔记--Python基础
- 【Python】python基础学习笔记
- python学习笔记3
- Python学习笔记
- Boost.Python学习笔记
- python学习笔记1
- python学习笔记2
- python学习笔记(2)
- Python学习笔记 Module
- Python学习笔记.
- python学习笔记(1)
- javax.net.ssl.SSLException: hostname in certificate didn't match证书不匹配的主机名
- [爆]小程序内可直接打开网页了!附开发文档
- 五分钟读懂UML类图
- NODEJS全局配置以及环境配置
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
- Python学习笔记
- 互联网智能广告系统简易流程与架构
- AndroidStudio打印不出Log
- 函数命名
- Exynos4412 裸机开发 —— IIC总线
- 微软Azure Stack混合云进入中国
- 刷题#R8
- 李飞飞最新演讲全文:机器已能“看懂”图像和视频,但我们仍站在人工智能研究的起点
- 周志华:深度学习理论探讨比应用滞后太多