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

# 导入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. QGIS与Python

    Qgis python开发教程(一):https://blog.csdn.net/u011435933/article/details/80419496

  2. 编写高质量代码改善C#程序的157个建议——建议111:避免双向耦合

    建议111:避免双向耦合 双向耦合是指两个类型之间相互引用.下面的代码是一种典型的双向耦合: class A { private B b; public void MethodA() { b.Meth ...

  3. New Year, New Devs: Sharpen your C# Skills

    At the beginning of each new year, many people take on a challenge to learn something new or commit ...

  4. 微信开发之c#下jssdk签名生成

    参考文章 :微信JS-SDK 权限签名算法 C#版 这篇文章讲解的的比较详细,而且算法准确,但是这篇文章有几个错误的地方需要注意; url必须动态生成 url不能写死,否则就算结果和官方检测的一致,也 ...

  5. HttpWebRequest(System.Net)模拟HTTP发送POST

    相关参考网上很多,但需要理解并转成自己的情况 public static string HttpWebRequestPost(string url, string param) { HttpWebRe ...

  6. Word页面去除下划线(Office 2017)实现

    后面就不用说了吧设置边框无

  7. javascript实现playfair和hill密码算法

    时至期末,补习信息安全概论作业.恰巧遇古典密码学算法中的playfair算法和hill算法,用javascript语言实现起来是在有趣,边查百度边编码,顺便好好补习一下javascript基础. pl ...

  8. [SDOI2009] HH的项链 | 莫队模板

    题目链接:戳我 题意:求区间中不同颜色的种类数 因为是要过知识点,所以又把这题拿出来做了一遍......这里就写两种方法吧 主席树做法 设pre[i]为第i个点上的颜色在前面序列中出现的最晚的一次的位 ...

  9. bzoj 3669: [Noi2014]魔法森林(并查集+LCT)

    Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...

  10. 2016级算法第二次上机-A.画个圈圈诅咒你

    890 画个圈圈诅咒你 思路 简单题.题目中的圆并没有什么实际作用,简化成线段重合问题会更好理解些. 暴力解法:使用双重for循环会T到想哭,记住最直接的方法一般是过不了题的. 解法一:二分查找.空间 ...