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模块的更多相关文章

  1. 6.Python网络编程_全局变量基础

    变量作用域: 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量.全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优 ...

  2. Python网络编程之网络基础

    Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...

  3. Python网络编程基础pdf

    Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...

  4. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...

  5. 好书推荐---Python网络编程基础

    Python网络编程基础详细的介绍了网络编程的相关知识,结合python,看起来觉得很顺畅!!!

  6. Python网络编程基础|百度网盘免费下载|零基础入门学习资料

    百度网盘免费下载:Python网络编程基础|零基础学习资料 提取码:k7a1 目录: 第1部分 底层网络 第1章 客户/服务器网络介绍 第2章 网络客户端 第3章 网络服务器 第4章 域名系统 第5章 ...

  7. Python网络编程基础 PDF 完整超清版|网盘链接内附提取码下载|

    点此获取下载地址提取码:y9u5 Python网络编程最好新手入门书籍!175个详细案例,事实胜于雄辩,Sockets.DNS.Web Service.FTP.Email.SMTP.POP.IMAP. ...

  8. python 网络编程 TCP/IP socket UDP

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  9. python 网络编程要点

    From http://www.zhihu.com/question/19854853 Python网络编程是一个很大的范畴,个人感觉需要掌握的点有:1. 如何使用Python来创建socket, 如 ...

  10. python网络编程应用(一)

     在之前的一篇博客<python网络编程基础>中介绍了socket.socket()函数及其应用,其实socket模块中还有很多属性可供网络应用程序使用.这里将详细讲解一下socket模块 ...

随机推荐

  1. acwing 66. 两个链表的第一个公共结点

    地址 https://www.acwing.com/problem/content/description/62/ 输入两个链表,找出它们的第一个公共结点. 当不存在公共节点时,返回空节点. 样例 给 ...

  2. windows10安装最新的redis

    官方给的redis的windows版本最新为3,而linux版本是5 这里通过win10子系统安装,win10子系统的配置见另一篇博客https://www.cnblogs.com/MC-Curry/ ...

  3. Android Monkey的用法(一)

      Monkey 简介 ü  Monkey 是一个命令行工具,可以运行在 Android 模拟器里或真实设备中.它可以向系统发送伪随机(pseudo-random)的用户事件流(如按键输入.触摸屏输入 ...

  4. Vue之外的杂谈笔记

    1.老项目的构建输出为什么臃肿? 引用:(引自http://www.cnblogs.com/linfangshuhellowored/p/5657285.html) 答:因为使用的是require的r ...

  5. ACL学习

    H3C ACL主要有三种: 标准ACL: 2000-2999,基于源IP地址分配: 高级ACL:3000-3999,基于源目IP地址分配,报文优先级等三.四层信息: 二层ACL:4000-4999,基 ...

  6. PELT算法

    参考:http://www.wowotech.net/process_management/PELT.html 本文是对https://lwn.net/Articles/531853/的翻译 mark ...

  7. 用go-module作为包管理器搭建go的web服务器

    本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器.并使用Endless来使服务器平滑重启,使用Swagger来自动生成Api文档. 源码在 ...

  8. tensorflow查看使用的是cpu还是gpu

    https://stackoverflow.com/questions/38009682/how-to-tell-if-tensorflow-is-using-gpu-acceleration-fro ...

  9. SpringBoot(五) SpringBoot整合mybatis

    一:项目结构: 二:pom文件如下: <parent> <groupId>org.springframework.boot</groupId> <artifa ...

  10. javascript常用数据验证函数

    正则表达式日期验证函数 function CheckDate(str){       //在JavaScript中,正则表达式只能使用"/"开头和结束,不能使用双引号       ...