python学习之路---day25( 网络编程基础和初识socket)

网络通信原理与Socket编程
本文深入解析网络通信的基本概念,包括IP地址、MAC地址、子网掩码、路由协议等,同时介绍了C/S和B/S架构的区别。通过具体实例,如访问京东网站的过程,阐述了网络通信的完整流程。此外,文章还提供了Python Socket编程的基础教程,包括服务端与客户端的建立及双向通信的实现。

                            基本网络知识和初识socket
一:基本知识

网线:传输电信号
集线器:将所有连接到集线器的网络设备连通起来
交换机: 升级版的集线器
网卡:接受电信号
MAC地址:物理地址: 8C-88-4B-88-B9-CC #前三位厂商编号,后三位生产流水号
单播:只发送给一台电脑
广播:发送给所有局域网内的电脑端
广播风暴:网络拥堵,信息不安全

Ip地址:
IPv4 地址: 192.168.15.46 #4个点分十进制
作用:划分广播域

例如:
192.168.15.46 #
Ipv4:192.168.15.0-192.168.15.255 # 八位二进制 256个电脑
Ipv6:

192.168.0.0 - 192.168.255.255
例如一个小型办公点的地址段可以是:192.168.123.0 -- 192.168.123.255

DHCP:自动分配IP地址
Arp表:保存着ip地址和mac地址对应关系
Arp协议:通过ip地址获取mac地址

子网掩码:计算两个ip地址是否属于同一网段:
255.255.255.0

源ip地址:192.168.15.46 ---〉目标的ip:192.168.16.30 #192.168.16.0
两个IP地址 与 运算后:
11000000.10101000.00001111.00101110
11111111.11111111.11111111.00000000
11000000.10101000.00001111.00000000 #192.168.15.0

路由器:转发消息
路由协议:计算路由转发消息的最优路径

端口号:0 - 65535,确定电脑上的应用程序的
Ip地址+端口 = 确定某个电脑上的某个应用程序

 

二:网络通信整个流程:以我们访问京东的网站为例子:(主要点:Ip地址+端口 = 确定某个电脑上的某个应用程序)

 

第一步:打开浏览器,想要请求访问京东,在地址栏输入了网址:www.jd.com。(www.jd.com是域名就是一个IP地址的名称,IP地址不好记,所有有了域名。)
第二步:先将请求信息发给了交换机,然后交给了路由器,路由发给DNS服务器,通过DNS协议去找我们要访问的京东的IP地址:
第三步:查到的京东服务器对应的IP地址之后,路由器通过路由协议找到一个路由转发的最优路径,将你的请求信息还送给这个IP地址的京东的路由器
第四步:京东的路由器发给了京东网站的服务器上
第五步:京东网站服务器按照来的时候的路径,在返回给你他自己的网站
第六步:当你打开浏览器的时候,你的电脑给你的浏览器这个运行起来的程序给了一个编号,叫做端口号,当你的电脑收到京东发送过来的消息的时候,你的
电脑通过端口号找到你的浏览器,你的浏览器拿到了京东的网站信息,然后将网站呈现在了自己的浏览器上

 

三:C\S 架构和B\S架构

01:C\S架构(****) client server
软件C\S架构:客户端\服务端架构:京东,淘宝,今日头条,qq,微信.....
02:B\S架构:浏览器(browser)\服务端>>>统一接口
硬件C\S架构: 打印机.、

四:socket初识

001:我们分别建立一个基础版的--〉服务端(server.py 文件)和一个客户端(client.py文件),让其能够互相发信息!
#server.py

 1 import socket
 2     server=socket.socket()
 3     ip_port=("192.168.xx.xx",8001)
 4 
 5     server.bind(ip_port)
 6     server.listen()  #监听
 7 
 8     conn,addr=server.accept()
 9     from_client_msg=conn.recv(1024)
10     print("来自客户端的消息",from_client_msg)
11 
12     conn.send(b"NONO")
13     conn.close()
14     server.close()
服务端
#client.py
 1 import socket
 2     client=socket.socket()
 3 
 4     server_ip_port=("192.168.xx.xx",8001)
 5     client.connect(server_ip_port)
 6 
 7     client.send(b'aaa')      #接受和发送的是bytes 类型的数据
 8 
 9     from_server_msg=client.recv(1024)
10 
11     print("来自服务端的消息:",from_server_msg)
12     client.close()
客户端

    先运行服务端文件(因为服务端需要一直开启,才能被客户端访问),再运行客户端去访问
客户端先给服务端发送一个信息,然后受到了服务端发来的回复信息!
002:升级版server和client,让他们互相能一直发送信息
 1 #server.py
 2     import socket
 3     server=socket.socket()
 4     
 5     ip_port=("192.168.xx.xx",8001)
 6     server.bind(ip_port)
 7 
 8     server.listen()
 9 
10     conn,addr=server.accept()
11 
12     while 1:
13         server_msg=input("服务端:")
14     
15         conn.send(server_msg.encode("utf-8")) #send消息
16     
17         from_client_msg=conn.recv(1024)  #1024 一次性能够接受的消息大小
18     
19         print("来自客户端的消息",from_client_msg.decode("utf-8"))
20 
21         #关闭通道
22         conn.close()
23 
24         #关闭socket
25         server.close()
服务端
 1 #client.py
 2         
 3     import socket
 4     client=socket.socket()
 5 
 6     server_ip_port=("192.168.xx.xx",8001)
 7     client.connect(server_ip_port)
 8 
 9     while 1:   #while 循环会非常占cpu
10         from_server_msg1=client.recv(1024)  #阻塞
11         print("来自服务端的信息:",from_server_msg1.decode("utf-8"))
12         client_msg=input("客户端:")
13         client.send(client_msg.encode("utf-8"))      #接受和发送的是bytes 类型的数据
14     # from_server_msg=client.recv(1024)
15     # print("来自服务端的消息:",from_server_msg)
16     client.close()
客户端     
  同理先运行服务端,然后再运行客户端,这样两者就可以一直链接通话了!
 

转载于:https://www.cnblogs.com/one-tom/p/9996176.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值