2024.6.18

2024-06-18 21:04
文章标签 18 2024.6

本文主要是介绍2024.6.18,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python的网络编程

网络四层
在开始前,我们需要先了解一下我们在网络通信过程中的四个层次
在这里插入图片描述
我们上网产生的数据都是经过协议栈一层一层的封装然后经网卡发送到网络,经网络发送到服务端,然后服务端又是一层一层的解封装拿到自己想要的数据。

我们学习的tcp和udp都是基于IP(网际互连协议)实现的

IP
计算机在互联网时必须要有一个唯一的标识,这样才能确定数据能够唯一发送
这个标识就是ip
目前有两种格式,一种是ipv4,一种是ipv6
127.0.0.1
回环地址,通俗的讲,就是我们在主机上发送给127开头的IP地址的数据包会被发送的主机自己接收,根本传不出去,外部设备也无法通过回环地址访问到本机。本机内联络时,我们一般就用它表示自己的ip地址

端口
是用来区分计算机应用程序的一个整数
范围是0到66535,我们使用时一般用大一些的端口号以免和别的程序冲突.像8080,9999等

两种通讯方式的不同
TCP

在链接时会进行"三次握手"来确保通信的安全
它负责将两台计算机建立可靠链接,能够保证将信息安全送达.
是一种可靠的,一对一的,面向链接的通信协议

UDP
它是无连接的,就像发短信一样,只要知道对方的IP地址和端口好就可以发送
但是因此它不保证信息的安全,也不一定能数据到达接收方

套接字socket

在我们编程时,我们关心的是我们的应用程序的数据能不能正常的发送出去和接收服务端发回来的数据。
这就需要一个桥梁,一端连接操作系统的协议栈,一端连接用户的应用数据。socket就是这个桥梁。

套接指的是套接管,就是将两根水管套接起来的管子,然后“字”是此连接的数据标识,即一个WORD,所以套接字就是一个标识连接的数据体。

这里它套接的又是什么东西呢?
它包含着通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。

Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

Python中的socket模块

常用的方法

bind((ip,port)) 绑定IP地址和端口
listen(N) 开始TCP监听,N表示操作系统挂起的最大连接数量,取值范围1-5之间,一般设置为5
accept() 被动接收TCP客户端连接,阻塞式
connect((ip,port)) 主动初始化TCP服务器连接
recv(size) 接收TCP数据,返回值为字符串类型,size表示要接收的最大数据量
send(str) 发送TCP数据,返回值是要发送的字节数量
recvfrom() 接收UDP数据,返回值为一个元组(data,address),data表示接收的数据,address表示发送数据的套接字地址
sendto(data,(ip,port)) 发送UDP数据,返回值是发送的字节数
close() 关闭套接字

我们发现,tcp和udp的使用方法不一样,所有要区分开使用

tcp版
我们先写服务器端

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 8080))
s.listen(1)while True:conn, addr = s.accept()print('Connected by', addr)data = conn.recv(1024)conn.sendall(b'Hello, world')conn.close()

我们注意到,服务器端要先绑定一个端口和ip地址,这个绑定的意义在于,告诉计算机去哪个IP地址找哪个应用端口来连接
之后就是监听,监听这个动作就是等待一个来连接的客户端
accept就是开始被动接受过来的链接,只有服务器这边通过了(accept)之后,客户端才能连接到服务器
recv就是接受传来的信息

然后我们再写客户端

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8080))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))

这里和服务器很不一样,因为是客户端,毕竟客户是这样的,只需要负责connect到服务器就行了,服务器要做的就多了
然后连接好了我们就可以发送数据了,想接收数据也正常用recv就可以

udp版

import socket
server_address = ('192.168.31.54', 12345)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:message = "祖国必定统一!"client_socket.sendto(message.encode(), server_address)#发送数据data,server = client_socket.recvfrom(1024)#接收数据

很显然,udp这边不需要连接,只需要确定好ip和端口,然后朝着这个地址用sendto发送消息就好了
想接受也只需要用recvfrom,然后解包赋值获取data和地址就好

区别
主要就创捷套接字时
一个是socket.SOCK_STREAM流式的双向连接
一个是socket.SOCK_DGRAM这里的dgram就是数据报的意思,说明是无连接的电报式的发送

这篇关于2024.6.18的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073052

相关文章

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli

Day18_0.1基础学习MATLAB学习小技巧总结(18)——MATLAB绘图篇(1)

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是基础的数据运算用法,对于功课来说更加重要的内容是建模、绘图、观察数据趋势,接下来我会结合自己的使用经验,来为大家分享绘图、建模使用的小技巧。 二维图形绘制 在本章开

18. 4 Sum

题目: 解答: 与之前的三数之和的解法类似,也是先排序,然后不断剔除不可能的条件,最后两个参数,通过两头求和计算得出。 代码: class Solution {public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> result;int len = nums.size

系统架构师考试学习笔记第三篇——架构设计高级知识(18)面向服务架构设计理论与实践

本章考点:         第18课时主要学习面向服务架构设计理论与实践。根据考试大纲,本课时知识点会涉及单选题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。         本课时知识架构如图18.1所示。 一、SOA的相关概念 (

PHP 验证身份号码 包括15位18位

查了很多资料 发现网上身份证15位的验证并不是那么严谨  今天研究了一下  代码如下 <?phpfunction check_id_card($num){//老身份证长度15位,新身份证长度18位$length = strlen($num);if ($length == 15) { //如果是15位身份证//15位身份证没有字母if (!is_numeric($num)) {return fa

最简单的使用JDBC[连接数据库] mysql 2019年3月18日

最极简版本的, 我们这里以mysql为例: 首先要创建maven工程, 需要引入jar包:,这里需要注意, 如果你安装的是mysql最新版本8以上的, 下面有些地方需要更改,具体就是mysql连接的url, 和5版本的不一样,具体解决请自行百度哈.这里只演示mysql5版本的? 依赖: <dependency>   <groupId>mysql</groupId>   <artifactId

实变函数精解【18】

文章目录 有限测度有限测度概率测度有限测度与概率测度的关系 σ \sigma σ-有限测度计数测度完备概率测度 参考文献 有限测度 首先,我们来明确“测度”的概念。在数学中,测度是一个将集合映射到非负实数(通常是实数的扩展,包括正无穷)的函数,它满足某些特定的性质,比如非负性、可加性等。有了这个基础,我们可以进一步探讨有限测度和概率测度的具体定义和它们之间的关系。 有限测度

【ACdream】ACdream原创群赛(18)のAK's dream

这次的群赛AK的不少,7题的也很多啊。。Orrrrrrrz。。。。 暂时只写出7题。。。 A:1196 模拟。。 /** this code is made by poursoul* Problem: 1196* Verdict: Accepted* Submission Date: 2014-09-06 19:12:44* Time: 0MS* Memo

【高等代数笔记】(18)N阶行列式

2. N阶行列式 2.12 行列式按k行(列)展开 【拉普拉斯定理】 n n n阶矩阵 A = ( a i j ) \boldsymbol{A}=(a_{ij}) A=(aij​),取定第 i 1 , i 2 , . . . , i k i_{1},i_{2},...,i_{k} i1​,i2​,...,ik​行(其中 i 1 < i 2 < . . . < i k i_{1}<i_{2}<.