Python网络编程基础 ❶ 计算机网络基础 初用socket模块
1、计算机网络基础
C/S 客户端/服务器端
B/S 浏览器端/服务器端
mac地址,ip地址,子网掩码,与计算得到网段,端口号
每台计算机的网卡都有全球唯一的地址,在生产时已经写进去了。 ip地址
是4个点分十进制 - ipv4协议
0.0.0.0 - 255.255.255.255
127.0.0.1 本机
内网字段 192.168.****
10.****
172.***
6个点分十进制 - ipv6协议
0.0.0.0.0.0 - 255.255.255.255.255.255
交换机
广播
单播
组播 arp协议 : 通过IP地址获取某一台机器的mac地址
将mac地址解析为ip地址,方便使用;RARP协议则是将ip转为mac。 子网掩码
子网掩码 和 ip地址进行 按位 与 运算 就能得出一个机器所在的网段
192.168.21.36
11000000.10101000.00010101.00100100
255.255.255.0 255.255.0.0
11111111.11111111.11111111.00000000
11000000.10101000.00010101.00000000 192.168.21.0 网段 网关地址 : 整个局域网中的机器能沟通过网关ip与外界通信
网段 : 子网掩码 和 ip地址进行 按位 与 运算
端口 : 0-65535 8000-酷狗音乐 22-ssh 3306-mysql
python 网络应用 8000
ip地址+端口号 : 在全网找到唯一的一台机器+唯一的应用
我们选择端口 : 8000之后 ip地址分为几类:公有地址、私有地址(192.168.0.0 172.10.0.0)
ip地址是为了计算机的唯一标识,端口号是应用程序的标识,
ip + port就是网络上的唯一地址定位 tcp协议
TCP是全双工的、面向连接的,可靠的并且是精确控制的协议。 一旦连接建立起来,那么连接两端的机器能够随意互相通信
面向连接的通信方式
数据安全不容易丢失
建立连接的 三次握手 ******
断开连接的 四次挥手 ****** tcp的数据段格式:
TCP - Transport Control Protocol
Source Port: 源端口号
Destination Port: 目的地端口号
Dequence Number: 序列号
Ack Numbers: 确认应答号
Offset: 头长度
Reserved: % 保留 总是被设置为零
Code: % 代码位
Ack is valid
Push Request
Window: 窗口
Checksum: Ox61a6 校验和
Urgent Pointer: 紧急
No TCP Options 选项
TCP Data Area: 数据
vL..+..+ .+. 4c 2b 2b
2b +. 2b
Frame Check Sequence:Ox0d0000f
UDP 用户数据报协议
面向过程的,不需要确定是否收到的 OSI参考模型 是7层 编程关心的:5层模型
应用层
传输层 TCP UDP 四层交换机、四层路由器
网络层 IP 路由器、三层交换机
链路层 MAC arp rarp 网卡、交换机
物理层 电信号 网线、集线器、中继器
2、socket模块
1)基本使用
服务器端:
import socket
# 服务器端 流程
sk = socket.socket() # 类似买手机和手机卡
sk.bind(('127.0.0.1', )) # 将手机卡绑定到手机上
sk.listen() # 听着手机是否有电话打来
conn, addr = sk.accept() # 接到电话,查看来电显示知道对方的地址
act = conn.recv() # 接听电话
'''
File "D:/python_bases/day30/server.py", line , in <module>
act = sk.recv() # 接听电话
OSError: [WinError ] 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,
发送或接收数据的请求没有被接受。
'''
print(act)
conn.send(b'hello python socket client! I have recv your msg!') # 打电话
conn.close() # 挂电话
sk.close() # 关手机
'''
File "D:/python_bases/day30/server.py", line , in <module>
socket.close() # 关手机
AttributeError: module 'socket' has no attribute 'close'
客户端:
import socket
# 客户端 流程
sk = socket.socket() # 类似买手机
sk.connect(('127.0.0.1', )) # 输入电话号码
sk.send(b'Hello Python Socket Server!') # 发送消息
act = sk.recv() # 接收消息
print(act)
sk.close() # 关闭手机
2)进阶使用
服务器端:
import socket sk = socket.socket()
sk.bind(('127.0.0.1', ))
sk.listen()
conn, addr = sk.accept() while :
rec = conn.recv().decode(encoding='utf-8')
if rec == 'bye':
conn.send(b'bye')
break
print(rec)
ipt = input('>>>>>>>>').strip()
conn.send(bytes(ipt, encoding='utf-8')) conn.close()
sk.close()
客户端:
import socket, time sk = socket.socket()
sk.connect(('127.0.0.1', 8080)) this_sec = time.time()
tm = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(this_sec))
time.sleep(0.2)
rec = sk.send(bytes(tm, encoding='utf-8')) while 1:
rec = sk.recv(1024).decode(encoding='utf-8')
if rec == 'bye':
sk.send(b'bye')
break
print(rec)
ipt = input('>>>>>>>>').strip()
sk.send(bytes(ipt, encoding='utf-8')) sk.close()
Python网络编程基础 ❶ 计算机网络基础 初用socket模块的更多相关文章
- 6.Python网络编程_全局变量基础
变量作用域: 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量.全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优 ...
- Python网络编程之网络基础
Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...
- Python网络编程基础pdf
Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...
- 好书推荐---Python网络编程基础
Python网络编程基础详细的介绍了网络编程的相关知识,结合python,看起来觉得很顺畅!!!
- Python网络编程基础|百度网盘免费下载|零基础入门学习资料
百度网盘免费下载:Python网络编程基础|零基础学习资料 提取码:k7a1 目录: 第1部分 底层网络 第1章 客户/服务器网络介绍 第2章 网络客户端 第3章 网络服务器 第4章 域名系统 第5章 ...
- Python网络编程基础 PDF 完整超清版|网盘链接内附提取码下载|
点此获取下载地址提取码:y9u5 Python网络编程最好新手入门书籍!175个详细案例,事实胜于雄辩,Sockets.DNS.Web Service.FTP.Email.SMTP.POP.IMAP. ...
- python 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- python 网络编程要点
From http://www.zhihu.com/question/19854853 Python网络编程是一个很大的范畴,个人感觉需要掌握的点有:1. 如何使用Python来创建socket, 如 ...
- python网络编程应用(一)
在之前的一篇博客<python网络编程基础>中介绍了socket.socket()函数及其应用,其实socket模块中还有很多属性可供网络应用程序使用.这里将详细讲解一下socket模块 ...
随机推荐
- numpy的一点学习
1.Numpy模块 NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组.它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体验在原生 ...
- 【分布式存储】Glusterfs快速搭建
目录 环境准备 步骤1,保证至少有三台服务器 步骤2,格式化和配置硬盘 步骤3,安装GlusterFS 步骤4,配置防火墙 步骤5,配置 trusted pool 步骤6,设置GlusterFS卷 步 ...
- Nginx超时设定
最近针对公司的goscon网关发了一个PR,新增了握手阶段的超时判定.现在回顾一下Nginx的所有超时判定,看看目前还缺少哪些判定 ngx_http_core_module包含的timeout: cl ...
- ASP.NET Core Identity 的示例
1. appsettings.json { "ConnectionStrings": { "DefaultConnection": "Server=( ...
- Fragment生命周期函数调用(ViewPager切换方式)
在使用ViewPager时,Google亲爹为我们提供了多种PagerAdapter.其中,与Fragment相关的是FragmentPagerAdapter和FragmentStatePagerAd ...
- Zipkin架构简介
Zipkin基本概念 Span:基本工作单元,一次链路调用就会创建一个Span Trace:一组Span的集合,表示一条调用链路.举个例子:当前存在服务A调用服务B然后调用服务C,这个A->B- ...
- MIME格式解析
- 邮件例子 一个MIME格式的邮件例子如下: Return-Path: <mlemos@acm.org> To: Manuel Lemos <mlemos@linux.local& ...
- iOS滑动手势UIPanGestureRecognizer 注意事项
今天在做侧滑页面时,发现页面随着滑动手势而滑动,到临界点时,如果再滑动会出现抖动现象.找到解决办法是进入方法后先判断一次,再判断是在滑动范围内让页面滑动.遂将滑动手势(UIPanGestureReco ...
- ios获取摄像头
NSError *error = nil; session = [[AVCaptureSession alloc] init] ; session.sessionPreset = AVCaptureS ...
- 结对编程(Java实现)
一.Github项目地址:https://github.com/qiannai/CreateArithmetic 二.PSP2.1表格: PSP2.1 Personal Software Proces ...