打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python从步兵到骑兵(五)
userphoto

2023.07.04 广东

关注

网络基础知识

开发工具pycharm http://链接:https://pan.baidu.com/s/1BZcdsSDNKhph_5lfe1bxAQ?pwd=love 提取码:love 


1. 网址URL的组成:

https://www.164.com/12/23534343.html?page=1&count=10

https---这个是协议。  www.164.com --域名也就是网路IP地址的别名

12/23534343.html --- 这个是资源相对路径   page=1&count=10 访问时传入的参数

2.http协议格式的数据传输

   是基于tcp协议来传输的,传输前要建立连接。http协议规定了数据的具体格式

   http协议规定了浏览器与web服务器通信数据的格式。

3. http协议请求报文的两种方式:

    a. GET---获取服务器数据

    b.POST---向服务器提交数据

4. http请求报文的格式

   a. GET--的格式 请求行,请求头,空行

  b. POST--的格式 请求行,请求头,空行,请求体

请求行---的组成: 请求方式,请求资源路径,http协议版本

5. http响应报文的格式

   响应行,  响应头 ,空行, 响应体

  状态码信息: 200  服务器成功处理请求,  400  错误的请求,地址或参数错误    

                        404  资源不存在     500  服务器内部代码出现错误

6. 如何查看http协议通讯过程

   利用开发者工具:谷歌浏览器,按F12 调出开发者工具,或者“在网页右击选择检查”

   开发者工具是查看网页布局和JS代码调试的利器

   通过Network标签选项可以查看每一次请求和响应的通信过程。

7. 如何启动python自带的静态服务器

    进入终端,在命令行模式下,进入资源所在目录,运行python -m http.server 8000  

    8000是设置的端口号(不设置的话,默认也是8000). 之后 浏览器输入         http://localhost/index.html就能显示了

8. 端口与端口号的意义

  每个运行的网络程序都会有个端口,要给程序发数据就要找到对应的端口。每个端口都对应一个端口号,通过端口号就可以找到端口。端口号有65536个。

通信流程就是,通过ip地址找到设备,通过端口号找到对应程序的端口,通过端口与程序交流数据

端口分两类:一类是系统占用的,1-1023不可以用(比如21分给ftp, 25分给smtp,80分给http)。其他是动态的,可以使用(如果程序没有指定,系统会动态的指定一个),程序退出,端口号就会释放。

9. 编写一个简单的客户端程序

  为了测试,服务器端可以使用“网络调试助手”工具,这里获取 http://链接:https://pan.baidu.com/s/11MDA1oa953xmhgB8B81M9g?pwd=love 提取码:love

import socket
if __name__ == '__main__':
    # socket.AF_INET代办ipv4, socket.SOCK_STREAM代表tcp通讯方式
    tcp_client_socket= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcp_client_socket.connect(("192.168.56.1",8080))
    #由于传输的是字节流,所以字符串要编码encode,接收到数据也要解码decode
    tcp_client_socket.send("hello world".encode(encoding='utf-8'))
    recv_data = tcp_client_socket.recv(1024)
    print(recv_data.decode(encoding='utf-8'))
    tcp_client_socket.close()

10. 编写一个简单的服务端程序

    步骤: 1 创建一个socket,2 绑定地址 (IP和端口号) 3 设置监听  4等待客户端连接 

               5 接受数据  6  发送数据  7 关闭连接

import socket
if __name__ == '__main__':
     #ser_socket只负责监听
    ser_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #绑定IP地址和端口号,不写ip地址,就是默认本机IP地址
    ser_socket.bind(("",8888)) 
    #服务端可以等待排队连接的最大数量128
    ser_socket.listen(128) 
     #阻塞等待,接受连接后,返回一个用以和客户端通讯的socket和客户端地址
    conn_socket,ip_port = ser_socket.accept() 
    print("客户端地址",ip_port)
    recv_data = conn_socket.recv(1024)
    print('接收到的数据:',recv_data.decode(encoding='utf-8'))
    conn_socket.send('你的数据我收到了'.encode('utf-8'))
    conn_socket.close()
    ser_socket.close()

注意:当客户端套接字close,那么服务端的recv返回的数据长度就是0,会解除阻塞,反之也是一样


12. if __name__  == ''__main__'': 的作用

if __name__  == ''__main__'':
  #每个模块都内置一个"__name__"属性,表示该模块的名称。模块的执行有两种,一种是作为主程序执行,一种是被导入其他模块执行。这个语句的作用是,判断如果作为主程序执行,里面的代码就会执行,否则不执行

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Socket编程指南及示例程序
netstat的替代者-ss命令实例详解
TCP/IP的底层队列
Python网络编程之TCP编程
实用小技巧 | 用socket玩转http接口
Android中的TCP/IP,HTTP的认识
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服