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. matlab键盘快捷键无法使用的解决办法

    打开matlab,在主页里点击 预设/preferences 左栏找 键盘/keyboard 点开键盘点击 快捷方式/shortcuts 在右边 活动设置 /Active settings 里选择 W ...

  2. Istio修改IngressGateway网络类型

    ingressgateway的默认网络类型是LoadBanlancer,在没有外部负载均衡的情况下可以修改为NodePort. 1.修改 kubectl patch service istio-ing ...

  3. spring-framework-core-ioc Container

    阅读须知 实例化bean xml方式实例化bean 注解方式实例化bean java方式实例化bean ClassPathXmlApplication和AnnotationConfigApplicat ...

  4. Java多线程并发面试问答

    Java并发面试问答 什么是原子操作?Java并发API中的原子类是什么? 原子操作在单个任务单元中执行,而不受其他操作的干扰.在多线程环境中,原子操作是必需的,以避免数据不一致. int++不是原子 ...

  5. H5混合应用之上下文切换

    一.native/web/hybrid 简介 目前主流应用程序大体分为:Native App(原生应用).Web App(网页应用).Hybrid App(混合应用),它们三者的优缺点比较如下表: 应 ...

  6. Map拼接URL地址

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * @Author: hoje * Des ...

  7. sql慢查询工具(配置代码)

    # 在mysql的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]中配置懒查询 slow_query_log = ON # 是否已经开启慢查询 long_q ...

  8. jquery 全选样例

    代码: $(function(){ $("#checkAllOld").click(function() { $("input[id^='box_old_']" ...

  9. vue-基本动画

    不使用动画 <div id="app"> <input type="button" value="toggle" @cli ...

  10. 全栈工程师对Python面试中is和==区别的详细解说!看完真的学到了!

    面试实习生的时候,当问到 is 和 == 的区别时,很多同学都答不上来,搞不清两者什么时候返回一致,什么时候返回不一致.本文我们来看一下这两者的区别. 我们先来看几个例子: a = "hel ...