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

# 导入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. Java Project 转 Dynamic Web Project

    使用eclipse 工具, 右键Java Project 项目 Properties - Project Facets  - Convert to faceted form... - 勾选Dynami ...

  2. Java的sun.misc.Unsafe类

    阅读目录 前言 Unsafe类的作用 获取Unsafe对象 Unsafe类中的API 前言 以下sun.misc.Unsafe源码和demo基于jdk1.7: 最近在看J.U.C里的源码,很多都用到了 ...

  3. [修正] Firemonkey 中英文混排折行,省略字符,首字避开标点

    问题:FMX 在移动平台的文字显示并非由该平台的原生 API 来显示,而是由 FMX.TextLayout.GPU 来处理,也许是官方没留意到中文字符的问题,造成在中英文混排折行时,有些问题. 修正: ...

  4. Backup--修改实例级别是否使用压缩备份的默认值

    --========================================= --修改实例级别是否使用压缩备份的默认值 USE master; GO EXEC sp_configure 'b ...

  5. Replication--Alwayson+订阅

    场景: 主服务器:SubServer1 从服务器:SubServer2 监听者:RepListener 分发库:DisServer 发布数据库:RepDB1 发布服务器:RepServer1 当fai ...

  6. IdentityServer4与ocelot实现认证与客户端统一入口

    关于IdentityServer4与ocelot博客园里已经有很多介绍我这里就不再重复了. ocelot与IdentityServer4组合认证博客园里也有很多,但大多使用ocelot内置的认证,而且 ...

  7. DCL实现多线程安全的高性能懒汉模式

    DCL实现多线程安全的高性能懒汉模式 1.单线程安全的懒汉模式实现 源码: private static LazyLoad instance = null; public static LazyLoa ...

  8. OCP 12c最新考试原题及答案(071-8)

    8.(5-4) choose the best answer:You need to produce a report where each customer's credit limit has b ...

  9. PTA 7-2 深入虎穴 (30 分)

    著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条 ...

  10. loj#6261. 一个人的高三楼(NTT+组合数学)

    题面 传送门 题解 统计\(k\)阶前缀和,方法和这题一样 然后这里\(n\)比较大,那么把之前的柿子改写成 \[s_{j,k}=\sum_{i=1}^ja_i{j-i+k-1\choose j-i} ...