爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9885|回复: 5

[混合编程] [已收纳]python之网络编程

[复制链接]

新浪微博达人勋

发表于 2019-10-9 14:30:24 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 15195775117 于 2021-3-9 10:20 编辑

前言

以前写了些单机软件练手,但目前web才是大形势,
不掌握web知识就是文盲,学校里教的东西是很陈旧的,亡羊补牢为时不晚

------------------------------

复习:

常见网络协议有TCP/IP和UDP
互联网协议≈TCP/IP协议
互联网上每台计算机的唯一标识是IP地址
IP地址=IPv4,是一个32位整数(二进制)
每8位二进制转成一个十进制数,就会得到4个十进制数,就是以下这种常见的形式:
“172.16.254.1”
两台计算机之间有着复杂线路,数据被分割成很多块,路由器将这些块以“IP包”发出去,
“IP包”的缺陷:按块发送,不保证是否达到,也不保证按顺序到达。

TCP

TCP协议建立在IP协议之上,通过“3次握手”,解决了IP协议的2个缺陷,TCP协议对“IP包”编号,丢包会重发。
浏览器的HTTP协议、邮件SMTP协议,建立在TCP基础之上。
“TCP报文”包括:需要传输的数据、源端口+IP地址、目标端口+IP地址

番外:
端口是什么?电脑上运行着浏览器、QQ、谷歌地球等联网软件,通信数据交给谁是按端口号区分的,每个网络程序都向操作系统申请唯一的端口号。
一个进程可以与多个计算机连接,它可申请多个端口。
HTTP服务的固定端口是80,FTP服务的端口是21.

UDP

TCP需要建立连接,UDP协议不需要建立连接,只需要知道目标的IP和端口,直接发送数据包,不保证一定到达,速度快

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-10-9 14:43:53 | 显示全部楼层
本帖最后由 15195775117 于 2021-3-9 10:04 编辑

2个程序通过网络服务器进行通信,需要通过Socket
Socket是孔、插座之意,其功能就是个多孔插座,也称“套接字

Socket用于描述IP和端口,是一个通信链的句柄
服务器上运行了多个服务软件,每个服务都打开一个Socket,并绑定到一个端口上

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-9 15:25:30 | 显示全部楼层
本帖最后由 15195775117 于 2021-3-9 10:12 编辑

一个TCP服务的流程:
使用socket新建一个“套接字”
使用bind绑定ip和port
使用listen使套接字可以被动连接
使用accept等待客户端的连接
使用recv/send收发数据


案例:服务器向客户端发送“HELLO”
使用同一台电脑的pyIDE和浏览器即可
第一次连接和每次刷新页面循环就会打印


360截图20191009151734722.jpg

360截图20191009151943129.jpg


import socket
#主机IP:
host='127.0.0.1'
#端口号:
port=8080
#新建socket对象:
web=socket.socket()
#绑定端口:
web.bind((host,port))
#设置最多连接数:
web.listen(5)
print('等待客户端连接...')
while True:
    #建立客户端连接:
    conn,addr=web.accept()
    #获取客户端请求数据:
    data=conn.recv(1024)
#    #打印接收到的数据:
#    print(data)
    print('收到客户端请求!')
    #向客户端发送数据:
    conn.sendall(b'HTTP/1.1 200 OK\r\n\r\nHello')
    #断开连接:
    conn.close()

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-9 16:47:51 | 显示全部楼层
本帖最后由 15195775117 于 2021-3-9 10:16 编辑

客户端与服务器通信案例

附件有2个py文件,一个是客户端,一个是服务器
打开2个cmd窗口,一个执行服务器脚本,一个执行客户端脚本,这时2个窗口之间就能通信了


360截图20191009154707128.jpg


客户端源代码:
import socket
#主机IP:
host='127.0.0.1'
#端口号:
port=8080
#新建socket对象:
web=socket.socket()
#绑定端口:
web.bind((host,port))
#设置最多连接数:
web.listen(5)
print('等待客户端连接...')
while True:
    #建立客户端连接:
    conn,addr=web.accept()
    #获取客户端请求数据:
    data=conn.recv(1024)
#    #打印接收到的数据:
#    print(data)
    print('收到客户端请求!')
    #向客户端发送数据:
    conn.sendall(b'HTTP/1.1 200 OK\r\n\r\nHello,I am Server')
    #断开连接:
    conn.close()


Server.py

598 Bytes, 下载次数: 1, 下载积分: 金钱 -5

Client.py

306 Bytes, 下载次数: 1, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-10 09:49:54 | 显示全部楼层
本帖最后由 15195775117 于 2021-3-9 10:19 编辑

web基础

浏览器与服务器通信步骤:

(1)客户端与服务器建立TCP连接(浏览器中输入URL后,浏览器先请求DNS服务器,获得请求站点的IP地址,即,根据www.XXXX.com获得对应的IP地址101.102.1.666
(2)客户端向服务器发送http协议请求包
(3)服务器向客户端发送应答包
(4)客户端解释HTML文档,在客户端渲染结果




浏览器向服务器发起请求的方法:
GET:请求指定的页面
HEAD:获取报头
POST:提交数据
PUT:发送的数据取代指定的文档内容
DELETE:请求删除页面
OPTIONS:允许客户端查看服务器性能


服务器返回客户端的状态码:
1**:收到
2**:请求成功执行
3**:重定向,为完成请求,必须进一步执行的动作
4**:请求错误
5**:服务器错误(请求正确但服务器做不到)
状态码看开头数字即可,例如202就是2**


案例:
访问蜂鸟图库,按F12进入调试界面,Network→点name中的地址→Header


360截图20191010094557759.jpg


可以看到地址为、请求方式、状态码、IP地址和端口号



密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-10 14:02:07 | 显示全部楼层
本帖最后由 15195775117 于 2021-3-9 10:20 编辑

“静态页面”:纯HTML网页

“动态网页”:
结合了HTML以外的高级程序设计语言和数据库技术进行的网页编程技术生成的网页都是动态网页

(动态网页一般以数据库技术为基础)

常用的4种动态网页技术:
PHP,ASP(微软),JSP(Java),CGI

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表