#————————————————————————————————客户端——————————————————————————————————————

# 导入socket库
import socket # 创建一个socket(AF_INET指定使用IPv4协议,SOCK_STREAM指定使用面向流的TCP协议)
# 声明socket类型,同时生成socket连接对象
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect('www.sina.com.cn',80)#参数类型tuple、80端口是Web服务的标准端口 # 发送数据:
s.send(b'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n')
#Python3只能发收bytes类型,可通过b‘转换Ascii码,中文通过encode('UTF-8')转换成ASIC码,通过decode()转ASIC码为原类型,不能发送空数据 # 接收数据:
buffer = []
while True:
d = s.recv(1024) #接收数据recv(max)方法、每次最多接收1k字节:
if d:
buffer.append(d)
else:
break
data = b''.join(buffer) # 关闭连接:
s.close() #读出header头部与Body——html
header, html = data.split(b'\r\n\r\n', 1) #分开头与html
print(header.decode('utf-8'))
# 把接收的数据写入文件:
with open('sina.html', 'wb') as f:
f.write(html) #————————————————————————————————测试服务器·—————————————————————————————————————
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 监听端口:
s.bind(('127.0.0.1', 9999)) #127.0.0.1本机IP s.listen(5) #listen()方法开始监听端口,传入的参数指定等待连接的最大数量(异步中)
print('Waiting for connection...') while True:
# 等待接受一个新连接:
sock, addr = s.accept() #accept()会等待并返回一个客户端的连接生成的实例(以便使用方法)和客户端请求的连接addr:ip+端口
# 创建新线程来处理TCP连接:
t = threading.Thread(target=tcplink, args=(sock, addr))
t.start() #每个连接创建新线程(或进程)来处理
def tcplink(sock, addr):
print('Accept new connection from %s:%s...' % addr) sock.send(b'Welcome!')
while True:
data = sock.recv(1024) #用客户端的连接实例sock接收数据
time.sleep(1)
if not data or data.decode('utf-8') == 'exit': #Unix系统中会接收空数据死循环
break
sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
sock.close() print('Connection from %s:%s closed.' % addr) #————————————————————————————————测试客户端·————————————————————————————————————— # 创建一个socket(AF_INET指定使用IPv4协议,SOCK_STREAM指定使用面向流的TCP协议)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
s.connect(('127.0.0.1', 9999))
# 接收欢迎消息:
print(s.recv(1024).decode('utf-8')) #接收数据recv(max)方法、每次最多接收1k字节:
for data in [b'Michael', b'Tracy', b'Sarah']:
# 发送数据:
s.send(data)
print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()

Python练习 | Web本质Socket的更多相关文章

  1. 【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https

    问题描述 在上篇博文"[Azure 应用服务]App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)"中,实现了通过 HT ...

  2. Python之Web框架

    Python之Web框架: 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...

  3. Python学习之路--Socket

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  4. Python之Web框架们

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...

  5. Python之路: socket篇

    (默认)与特定的地址家族相关的协议,如果是  ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议 sk import socketip_port = ()sk = socket.socket( ...

  6. Python 17 web框架&Django

    本节内容 1.html里面的正则表达式 2.web样式简介 3.Django创建工程 Html里的正则表达式 test 用来判断字符串是否符合规定的正则       rep.test('....')  ...

  7. Python3.5学习十八 Python之Web框架 Django

    Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...

  8. python的Web框架:初识Django

    web应用程序 本质 socket服务端 浏览器本质是一个socket客户端 1. 服务器程序 socket请求 接受HTTP请求,发送HTTP响应. 比较底层,繁琐,有专用的服务器软件,如:Apac ...

  9. Python的WEB框架

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. ? 1 2 ...

随机推荐

  1. 可epoll队列

    什么是可epoll队列? 就可以使用epoll来监控队列中是否有数据的队列,当然也支持select和poll. 应用场景 一个线程,需要将队列(共享内存队列或普通队列均可)中的数据取出来,然后通过网络 ...

  2. 编写高质量代码改善C#程序的157个建议——建议143:方法抽象级别应在同一层次

    建议143:方法抽象级别应在同一层次 看下面代码: class SampleClass { public void Init() { //本地初始化代码1 //本地初始化代码2 RemoteInit( ...

  3. Android colorAccent、colorPrimary、colorPrimaryDark actionbar toolbar navigationbar

    伴随着Android5.0的发布也更新了support-v7-appcompat 到V21,其中增加了ToolBar.recyclerview.cardview等控件. Android5.0对改变AP ...

  4. Python之模块一

    1 >模块介绍: 模块,用一坨代码实现了某个功能的代码集合,类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的          重用性和代码间的吻合, ...

  5. 第二章第一个项目——package.json

    在其中写版本好的时候, { "name": "chatroom", "version": "0.0.1", " ...

  6. Java 实现 WC.exe

    Github:https://github.com/YJOED/Code/tree/master/WC/src 一.题目:实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他 ...

  7. opencv——阈值分割图像

    #include "stdafx.h" #include "opencv2\opencv.hpp" using namespace cv; IplImage* ...

  8. redis整理の走进redis世界

    声明:原文摘自http://weibo.com/u/2446082491,谢谢他的分享! 在当前大型互联网应用以及提供云计算服务的时候,怎样保证系统在海量数据环境下的高性 能.高可靠性.高扩展性.高可 ...

  9. Centos部署Abp zero常见问题及处理

    多租户切换,多语言切换异常 解决: 修改nginx配置,在nginx.conf中 增加 #多租户问题 ignore_invalid_headers off; 修改应用程序Logo异常处理 异常: Sy ...

  10. 使用扩展方法重写.NET底层架构

    我们在开发B/S架构的项目时,用到的都是.NET底层各种命名空间提供的操作类,利用扩展类可以重新写出一套真正属于你自己的框架. PS:扫描下方二维码或点击链接,加入QQ群