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. springmvc 什么时候 set applicationContext 到 ServletConfig 的?

    springmvc 什么时候 set applicationContext 到 ServletConfig 的? FrameworkServlet --> initWebApplicationC ...

  2. 使用 github pages快速部署自己的静态网页

    看见很多大神在Github Pages上部署Demo,感觉效果还不错,刚才自己也试了一下,发现其实并不难! 选择 github pages 的理由 使用零成本: github pages 集成在 gi ...

  3. IT兄弟连 Java语法教程 流程控制语句 经典案例

    使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环:而break则是完全终止循 ...

  4. app自动化测试环境搭建之node+appium+ADT+MUMU模拟器

    一.安装Microsoft .NET Framework 4.5 检测本机已安装的程序中,是否已经安装Microsoft .NET Framework 4.5及以上的版本 如果没有安装,则获取安装文件 ...

  5. VSCode 开发插件 推荐

    VSCode 必装的 10 个高效开发插件  本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件,用于大大提高软件开发的效率. VSCode 的基本使用可以参考我的原创视 ...

  6. rxJava2.x源码解析

    一. Rxjava是什么 Rxjava在GitHub的介绍是 "A library for composing asynchronous and event-based programs u ...

  7. C#函数的参数传递2(ref\out)

    using System; namespace class1 { class program { static void Main(string[] args) { Console.Write(&qu ...

  8. MySQL基础(MySQL5.7安装、配置)

      写在前面: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...

  9. elasticsearch window下配置安装

    1.首先下载elasticsearch 下载链接:https://www.elastic.co/cn/downloads/elasticsearch 第一张图是下载的,第二章图是下载msi的程序,直接 ...

  10. 浅谈Java中switch分支语句

    前言: 在程序中遇到多分支选择的时候,想必大家都喜欢用if...else if...else...语句,尤其是初学者,因为在了解switch语句之前,我也是只会用if...else语句.那么现在看完这 ...