零基础学Python之网络编程

1.什么是socket

官方定义: 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

2.socket()函数

socket.socket([family[, type[, proto]]])
  • family: 套接字家族可以使 AF_UNIX 或者 AF_INET。
  • type: 套接字类型可以根据是面向连接的还是非连接分为 SOCK_STREAMSOCK_DGRAM
  • protocol: 一般不填默认为 0。
AF_INET需经过多个协议层的编解码,消耗系统cpu,并且数据传输需要经过网卡,受到网卡带宽的限制。AF_UNIX数据到达内核缓冲区后,由内核根据指定路径名找到接收方socket对应的内核缓冲区,直接将数据拷贝过去,不经过协议层编解码,节省系统cpu,并且不经过网卡,因此不受网卡带宽的限制。AF_UNIX的传输速率远远大于AF_INETAF_INET不仅可以用作本机的跨进程通信,同样的可以用于不同机器之间的通信,其就是为了在不同机器之间进行网络互联传递数据而生。而AF_UNIX则只能用于本机内进程之间的通信。

3.UDP实现客户端与服务端通信

  • UDFClient
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
client.sendto("This is client hello".encode("utf-8"),("127.0.0.1",8888))
data,server = client.recvfrom(1024)
print(data.decode("utf-8"))
client.close()
  • UDFServer
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server.bind(("127.0.0.1",8888))
print("UDF Server Started")
while True:data,client = server.recvfrom(1024)print("Receive client messages:",data.decode("utf-8"))server.sendto("This is server hello".encode("utf-8"),client)

运行效果:
在这里插入图片描述

4.TCP实现客户端与服务端通信

  • TCPClient
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",8080))
while True:print("请输入发送服务端的内容:")send_data = input()client.send(send_data.encode("utf-8"))if send_data == "close":client.close()print("客户端关闭...")breakdata = client.recv(1024).decode("utf-8")print("服务端响应的数据:",data)
  • TCPServer
import socketserver = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("127.0.0.1",8080))
# 同一时刻,允许多少客户端进行通信
server.listen(5)
client,address = server.accept()
print("服务端启动...")
while True:data = client.recv(1024)msg = data.decode("utf-8")if msg == "close":print("服务端关闭...")server.close()breakprint("客户端发送的内容:", msg)print("请输入回复内容:")client.send(input().encode("utf-8"))

运行效果:

在这里插入图片描述

5.requests模块发送http请求

  • requests模块常用方法:
方法名描述
requests.request(url)构造一个请求,支持以下各种方法
requests.get()发送一个Get请求
requests.post()发送一个post请求
requests.head()获取html请求头信息
requests.put()发送put请求
requests.patch()提交局部修改的请求
requests.delete()提交删除请求
  • 属性及方法
属性描述
response.status_code响应状态码
response.content将response对象转成二进制数据
response.text把response对象转换成为字符串数据
response.encoding定义response对象的编码
response.cookie获取请求后的cookie
response.url获取请求的地址
response.json()内置的JSON解码器
  • 使用requests模块发送一个带参数的get请求
url = "http://192.168.140.123:9090/product/list?type=rate"
headers = {"token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIyNTYyODM4MzI1NDMzNDI1OTIiLCJzdWIiOiIxIiwiaWF0IjoxNzA2MTY3Njc3LCJleHAiOjE3MDY3NzI0Nzd9.CB0YpMwQRxGKqqeUj29D0TiFgUO7YDOx04t2-ocfTdo"
}
response = requests.get(url=url, headers=headers)
print(response.text)
  • 使用requests模块发送一个带参数的post请求
url = "http://192.168.140.123:9090/product/page"
params = {"current": 1,"size": 15
}
headers = {"token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIyNTYyODM4MzI1NDMzNDI1OTIiLCJzdWIiOiIxIiwiaWF0IjoxNzA2MTY3Njc3LCJleHAiOjE3MDY3NzI0Nzd9.CB0YpMwQRxGKqqeUj29D0TiFgUO7YDOx04t2-ocfTdo","Content-Type": "application/json"
}
response = requests.post(url=url, headers=headers, data=json.dumps(params))
print(response.text)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT论文指南|ChatGPT论文写作过程中6个润色与查重提示词

论文完成初稿之后,一般情况下,宝子们还需要找专家给我们提出评审意见。找专家评审其实并不容易,即使对老师来说,找人评审论文也是一件苦活。我们这个时候可以通过文字提示让 ChatGPT充当我们的评审专家,为论文提出问题…

【操作系统·考研】I/O管理概述

1.I/O设备 1.1 块设备 信息交换以数据块为单位,它属于有结构设备。 块设备传输速率较高,可寻址,且可对该设备随机地的读写。 栗子🌰:磁盘。 1.2 字符设备 信息交换以字符为单位,属于无结构类型。 字符…

电力负荷预测 | 基于LSTM、TCN的电力负荷预测(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于LSTM、TCN的电力负荷预测(Python) 源码设计 #------------------

一文彻底搞懂Redis的三种集群模式

文章目录 1. 主从模式1.1 基本原理1.2 工作机制1.3 优缺点 2. 哨兵模式2.1 基本原理2.2 工作机制2.3 优缺点 3. 集群模式3.1 基本原理3.2 工作机制3.3 优缺点 4. 总结 redis高可用的三种模式:主从模式,哨兵模式,集群模式。 所谓的高可用&…

如何修改远程端服务器密钥

前言 一段时间没改密码后,远程就会自动提示CtrlAltEnd键修改密码。但我电脑是笔记本,没有end键。打开屏幕键盘按这三个键也没用。 解决方法 打开远程 1、远程端WINC 输入osk 可以发现打开了屏幕键盘 2、电脑键盘同时按住CtrlAlt(若自身电…

回溯法解决P2089 烤鸡问题太香啦,组合问题就用回溯法就对了!

学回溯的第二天,发现之前做过的一道洛谷的枚举题也可以用回溯法去解决,还是相当滴nice的。 先来看看leetcode上的这两道题 216.组合总和III 题目链接:216. 组合总和 III 思路就是比组合问题多了一个和为n的限制,大体还是可以…

嵌入式系统设计师

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 第一章 计算机系统基础1、数值转换数的转换数据的存储单位 第一章 计算机系统基础 1、数值转换 数的转换 数据的存储…

解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题

目录 一 问题描述 二 解决方案 三 方案来源 四 参考资料 & AI工具 一 问题描述 为了方便进行收藏夹同步,开始从Chrome浏览器切换到Edge浏览器。在使用Edge浏览器过程中发现“每次鼠标点击会出现一个黑色边框”(效果如下图所示)&#…

去照片背景的方法有哪些?分享这些简单的方法给你

在忙碌的日常工作中,不少朋友经常需要整理大量的图片素材。有时候,我们需要将那些带有背景色的图片转换成透明素材,这样在其他场合使用起来会更加方便。那么,有没有一种简便的方法,能将图片的背景去掉,轻松…

重学Java 13.面向对象.1

在熟悉的事物中循环 ——24.2.7 一、static关键字 1.static关键字的介绍以及基本使用 1.概述:static是一个静态关键字 2.使用: a.修饰一个成员变量: static 数据类型 变量名 b.修饰一个方法: 修饰符 static 返回值类型 方法名&am…

【办公技巧】如何设置Word文档部分内容无法编辑?

工作中,我们可能会在word中制作一些请柬、表格之类的,有些文件内容不想要进行修改,为了防止他人随意修改内容。我们可以设置限制编辑,可以对一部分内容设置限制编辑,具体方法如下: 我们将需要将可以编辑的…

作业2.6

一、填空题 1、一个类的头文件如下所示&#xff0c;num初始化值为5&#xff0c;程序产生对象T&#xff0c;且修改num为10&#xff0c;并使用show()函数输出num的值10。 #include <iostream.h> class Test { private: static int num; public: Test(int); void sh…

【华为 ICT HCIA eNSP 习题汇总】——题目集13

1、以下在项目规划阶段中需要完成的工作是&#xff08;&#xff09;。 A、确定技术方案 B、了解项目背景 C、选择网络产品 D、规划 IP 地址 考点&#xff1a;网络规划与设计 解析&#xff1a;&#xff08;B&#xff09; 确定技术方案是在网络规划的设计阶段完成的工作&#xff…

#Z2322. 买保险

一.题目 二.思路 1.暴力 训练的时候&#xff0c;初看这道题&#xff0c;这不就打个暴力吗&#xff1f; 2.暴力代码 #include<bits/stdc.h> #define int long long using namespace std; int n,m,fa,x,y,vis[1000001],ans; vector<int> vec[1000001]; void dfs(i…

如何实现高效的Web自动化测试?

随着互联网的快速发展&#xff0c;Web应用程序的重要性也日益凸显。为了保证Web应用程序的质量和稳定性&#xff0c;Web自动化测试成为必不可少的一环。然而&#xff0c;如何实现高效的Web自动化测试却是一个值得探讨的课题。 首先&#xff0c;选择合适的测试工具是关键。市面…

Android 13.0 原生SystemUI下拉通知栏每条通知默认展开

1.前言 在13.0的系统rom原生开发中,在在对SystemUI下拉通知栏做定制的时候,在下拉状态栏的时候,通知栏中最后一条通知默认是收缩的 点击按钮 就会展开 原生系统systemui就是如此,为了更美观 所以要求最后一条通知也默认展开,显得更美观 最终效果图: 2.原生SystemUI下拉通…

THM学习笔记——枚举

复制以下内容时注意中英文符号区别 在枚举之前我们要将shell升级为完全交互式的tty。 这涉及以下几条命令 python -c import pty;pty.spawn("/bin/bash") stty raw -echo export TERMxterm rlwrap nc -lvnp 443 从以上选一条即可 手动枚举 以下命令只需了解即可&…

VS Code中主程序C文件引用了另一个.h头文件,编译时报错找不到函数

目录 一、问题描述二、问题原因三、解决方法四、扩展五、通过CMake进行配置 一、问题描述 VS Code中主程序C文件引用了另一个.h头文件&#xff0c;编译时报错找不到函数 主程序 main.c #include <stdio.h> #include "sumaa.h"int main(int, char**){printf(&q…

thinkphp获取用户最新的阅读记录,按书籍id去重,返回最新的阅读记录

通过uid查询data_user_zhangjie的记录 去重shuji_id 获取createtime最新的一条数据 //获取用户章节记录public function getUserZhangjieList(){$uid = input(uid);if(empty

机器学习 | 一文看懂SVM算法从原理到实现全解析

目录 初识SVM算法 SVM算法原理 SVM损失函数 SVM的核方法 数字识别器(实操) 初识SVM算法 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种经典的监督学习算法&#xff0c;用于解决二分类和多分类问题。其核心思想是通过在特征空间中找到一…