网络编程

Posted gxj742

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。

网络基础相关知识:

1.架构

(1)C/S 架构:client客户端和server服务器端       优点:能充分发挥pc机的性能

(2)B/S架构:browser浏览器和server服务器端  隶属于C/S架构      优点:统一了应用的接口

2.通信

(1)同一台电脑上两个py程序通信: 打开一个文件

(2)两个电脑如何通信: 连一根网线

(3)多个电脑通信: 借助于交换机  

多个电脑通信过程:电脑1首先发送一个请求帧(我的ip地址是:....,我的mac地址是...;我要找ip地址是....的主机),将此请求发送给交换机,交换机广播这条消息给其他所有主机,目标主机接收到消息后.对比发现自己就是被找的主机后,回复给交换机信息(我的ip是....,我的mac地址是......;请回复给ip地址是....,mac地址是:...主机)交换机以单播的形式返回给源主机.

网卡有mac地址(物理地址):mac地址全球唯一的    mac地址是网卡制造商给的    mac地址是十六进制    类似身份证

ip地址:是一个四位点十进制,它标识了计算机在网络中的位置

arp协议:通过目标ip地址获取目标mac地址的一个协议(过程)

端口:操作系统(os)为本机上每一个运行程序者随机分配的一个端口,其他电脑上的程序可以通过端口获取到这个程序.

ip地址+端口 = 找到某台电脑的端口    ip找到主机   端口找到某一服务

交换机通信方式:1.广播;2.单播:一对一;3.组播:一对多

路由器:连接不同网段(ip地址),路由(里面含有一个路由表)

网关:类似于一个局域网的出口和入口

网段:一个局域网内的ip地址范围

子网掩码:子网掩码&ip地址==网段

例:

ip地址:   192.168.12.104   ==>   1100 0000. 1010 1000. 0000 1010. 0110 1000
&
子网掩码: 255.255.255.0 ==> 1111 1111. 1111 1111. 1111 1111. 0000 0000
网段: 1100 0000. 1010 1000. 0000 1010. 0000 0000

196. 168. 12. 0

标准输出:屏幕(stdout)    标准输入:键盘(stdin)

osi五层模型:

        协议        物理设备

应用层:       http/https/ftp

传输层:            tcp/udp         四层交换机,四层路由器

网络层:            ip协议           路由器,三层交换机

数据链路层:     arp协议      以太网交换机(二层交换机),网卡,网桥(mac地址相关)

物理层:       传输电信号           集线器,网线,光纤,一层交换机

二层交换机:组织局域网,不具备跨网段传输

三层交换机:具有跨网段传输

四层交换机:帮用户采取tcp/udp协议

网桥:可以实现跨网段的传输数据

tcp协议:比较安全   udp协议:传输速度快

 

socket模块(套接字):

socket的两种类型:

(1).AF_UNIX:基于文件类型的套接字(早期socket是源于unix系统而研发的一个功能,主要为同一台电脑上多个编程直接通信),unix系统中心思想是:一切皆文件.

(2)AF_INET:基于网络的套接字

tcp协议(SOCK_STREAM):可靠的,面向连接的,面向数据流形式的传输方式

udp协议(SOCK_DGRAM):不可靠的,不面向连接的,面向数据报的传输方式,但是传输速度块.

例:

服务端代码:
import socket
import time
sk = socket.socket() #实例化对象 不传参数默认使用基于网络类型套接字,tcp协议
sk.bind(("192.168.12.93",45612)) #bind()接收元组类型元组第一个元素是ip地址,第二个元素是端口 端口范围0-65535 但是0-1023这些不能用
sk.listen() #同时能接受的连接
conn,addr = sk.accept()#接受客户端的连接阻塞等待conn == <socket.socket fd=472, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘192.168.12.93‘, 45612), raddr=(‘192.168.12.93‘, 64343)> addr == (‘192.168.12.93‘, 64343)
msg = conn.recv(1024) #接受数据 recv()参数时数据的大小
print(msg.decode("utf-8"))
conn.close() #关闭客户端的连接
sk.close() #关闭服务端
==>hello

客户端代码:
import socket
sk = socket.socket()           #实例化对象
sk.connect(("192.168.12.93",45612)) #连接地址
sk.send("hello".encode("utf-8"))    #发送信息
sk.close()                #关闭客户端

 























以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

如何在 Django Summernote 中显示编程片段的代码块?