PythonNET网络编程2
UDP应用:广播
- 广播:一点发送,多点接收
- 广播地址:一个网段内有一个指定的广播地址,是该网段的最大地址
- 192.168.2.255
- 广播风暴:一个网络中有大量的广播就会产生广播风暴占用大量带宽,影响正常的访问速度
# 接受广播:
from socket import *
#创建套接字
s = socket(AF_INET,SOCK_DGRAM)
#设置套接字可以发送接收广播
s.setsockopt(SOL_SOCKET,SO_BROADCAST,1)
#固定接收端口
s.bind(('0.0.0.0',9999))
while True:
try:
msg,addr = s.recvfrom(1024)
print("从{}获取信息:{}".\
format(addr,msg.decode()))
except (KeyboardInterrupt,SyntaxError):
raise
except Exception as e:
print(e)
s.close()
# 发送广播
from socket import *
from time import sleep
#设置目标地址
dest = ('192.168.2.255',9999)
s = socket(AF_INET,SOCK_DGRAM)
#设置能够发送广播
s.setsockopt(SOL_SOCKET,SO_BROADCAST,1)
while True:
sleep(2)
s.sendto("来呀,带你去看晴空万里".encode(),dest)
s.close()
TCP应:http传输
http协议:超文本传输协议,是一个应用层协议
用途:网页数据的传输,数据传输方法
特点 :
- 应用层协议,传输层使用tcp服务
- 简单,灵活,多种语言都有http相关操作接口
- 无状态的协议,即不记录用户传输的信息
- http1.1 支持持久连接
一端通过http请求的格式发送具体请求内容,另一端接收http请求,按照协议格式解析
获取真实请求后按照http协议响应格式组织回复内容,回发给请求方,完成一次数据交互
http请求(request)
请求行:具体的请求类别和请求内容
- 格式:GET / HTTP/1.1(请求类别 请求内容 协议版本)
- 请求类别:表示请求的种类
- GET 获取网络资源
- POST 提交一定的附加信息,得到返回结果
- HEAD 获取响应头
- PUT 更新服务器资源
- DELETE 删除服务器资源
- CONNECT
- TRACE 用于测试
- OPTIONS 获取服务器性能信息
请求头:对请求内容的具体描述信息
- Accept-Encoding: gzip, deflate
- Accept-Language: zh-CN,zh;q=0.9
- Cache-Control: max-age=0
- Connection: keep-alive
空行
请求体:请求参数或者是提交内容
http响应(response)
响应行:反馈响应的情况
- 格式 : HTTP/1.1 200 OK(协议版本 响应码 附加信息)
- 响应码:响应的具体情况
- 1xx : 提示信息,表示请求成功
- 2xx : 响应成功
- 3xx : 响应需要重定向
- 4xx : 客户端错误
- 5xx : 服务端错误
- 常见响应码:
- 200 成功
- 404 请求内容不存在
- 401 没有访问权限
- 500 服务器发生未知错误
- 503 暂时无法执行
响应头:对响应内容的具体描述
- Connection: keep-alive
- Content-Encoding: gzip
- Content-Type: text/html
- Date: Thu, 06 Sep 2018 09:11:18 GMT
空行
响应体:返回给请求端的具体内容
from socket import *
#创建tcp套接字
s = socket()
s.bind(('0.0.0.0',8000))
s.listen(5)
while True:
c,addr = s.accept()
print("Connect from",addr)
data = c.recv(4096)
print("*******************")
print(data) #浏览器发来的http请求
print("*******************")
#组织响应内容
data = '''HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/html
<h1>Welcome back Home</h1>
<p>这是一个测试</p>
'''
c.send(data.encode())
c.close()
s.close()
要求
- 什么是http协议
- 请求的格式和每一部分的功能
- 响应的格式和每一部分功能
- 常见的请求类型和响应码代表什么
通过tcp套接字完成一个文件的发送,将一个文件从客户端发送给服务端,或者从服务端发送给客户端均可,文件可以是文本,也可以是图片
HTTPServer
# 编写简易的HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<h1>My first html page</h1>
</body>
</html>
# 编写本地服务端
from socket import *
def handleClient(connfd):
connfd.recv(4096)
# request = connfd.recv(4096)
# #将request请求按行分割打印出来显示
# request_lines = request.splitlines()
# for line in request_lines:
# print(line.decode())
try:
f = open("index.html")
except IOError:
response = "HTTP/1.1 404 not found\r\n"
response += "\r\n" #空行
response += "====Sorry not found====="
else:
response = "HTTP/1.1 200 OK\r\n"
response += "\r\n" #空行
response += f.read()
finally:
#发送给浏览器
connfd.send(response.encode())
#创建套接字
def main():
sockfd = socket()
# 设置端口重用
sockfd.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
# 绑定监听
sockfd.bind(('0.0.0.0',9999))
sockfd.listen(3)
print("Listen to the port 9999")
while True:
connfd,addr = sockfd.accept()
#处理请求
handleClient(connfd)
connfd.close()
if __name__ == "__main__":
main()
在浏览器中运行127.0.0.1:9999
PythonNET网络编程2的更多相关文章
- PythonNET网络编程1
# PythonNET 网络编程 ISO(国际标准化组织) 制定了 OSI(Open System Interconnectio),意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型 ...
- PythonNET网络编程4
本地套接字 Linux 文件 b(块设备文件) c(字符设备文件) d(目录) -(普通文件) l(链接) s(套接字) p(管道) 作用:用于本地不同的程序间进行通信 创建流程 创建本地套接字 so ...
- PythonNET网络编程3
IO IO input output 在内存中存在数据交换的操作都可以认为是IO操作 和终端交互 : input print 和磁盘交互 : read write 和网络交互 : recv send ...
- 猫哥网络编程系列:HTTP PEM 万能调试法
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...
- python select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
- 浅谈C#网络编程(一)
阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...
- C++11网络编程
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...
随机推荐
- 洛谷 P2171 Hz吐泡泡
P2171 Hz吐泡泡 题目背景 Hz大大是一种可爱的动物(神).他很喜欢吐泡泡(更喜欢写作业). 题目描述 这天,Hz大大心血来潮,吐了n个不同的泡泡玩(保证没有重复的泡泡).因为他还要写作业,所以 ...
- sendfile复习
之前有一篇文章: http://www.cnblogs.com/charlesblc/p/6341605.html 今天又看到其他的一篇: http://www.cnblogs.com/fengyv/ ...
- [Python] isinstance() for checking object type
isinstance("foo", str) isinstance(1, int) isinstance(4.0, float)
- 修正EasyUI的BUG——Form中存在FileBox时的数据载入错误
使用EasyUI载入服务端返回的数据时经常使用 $('#fm').form('load', row); 实现,既方便又简洁,可是.当Form中包括有FileBox时,代码就会报错,经过跟踪发现.由于E ...
- The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.
https://stackoverflow.com/questions/30045871/sorting-the-view-based-on-frequency-in-sql-server Just ...
- android 图片特效处理之模糊效果
这篇将讲到图片特效处理的模糊效果.跟前面一样是对像素点进行处理,算法是通用的,但耗时会更长,至于为什么,看了下面的代码你就会明白. 算法: 一.简单算法:将像素点周围八个点包括自身一共九个点的RGB值 ...
- Android 实现QQ、微信、新浪微博和百度第三方登录
前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppK ...
- 使用spring-boot 国际化配置所碰到的乱码问题
写好html静态页面 , 也加上了编码格式 , 获取国际化展示在浏览器中还是存在乱码 , 开始以为是浏览器编码格式问题 , 做过处理后任没有得到解决 , 具体的处理方案如下: <meta ht ...
- STM32上使用JSON
一.STM32工程中添加JSON 最近在一网2串项目,串口和网口之间可能需要定义一下简单的通信协议,而通信协议上则需要去定义一下通信的数据格式,上次听剑锋说要用Json来定义,目前查了下资料具体如何去 ...
- css大会站点顶部的一个特效
看到http://css.w3ctech.com/ 上一个效果认为挺赞的. 然后学些了一下. demo地址:http://codepen.io/tianzi77/pen/mJaLWq html结构非常 ...