网络编程
Posted youhongliang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。
当一台电脑中两个程序进行交互式,可以通过一个文件来交流: 故:同一台机器上的两个程序之间的通讯就需要依赖文件
如图:
当两台或者多台电脑进行交流时,可以通过交换机来进行交流。 故;两台机器之间的两个程序之间的通讯就需要依赖网络
当不在一台交换机上的两台电脑的交互时,需要用到路由器
交换机 :负责一个网络内的多台机器之间的信息交换
网卡 :身份证 mac地址 计算机在网络上的身份证
mac地址 :16进制的数 全球唯一
区域性
ip地址
4位的点分十进制数 IPV4
192.168.10.xxx
IPV6
6位的点分十进制数
0.0.0.0.0.0 - 255.255.255.255.255.255
127.0.0.1 :本地回环地址 本机的地址
0.0.0.0 : ip地址的、回环地址的所有的用户都能找到你这台机器
局域网
网关ip 不同局域网之间通信依赖的ip地址
子网掩码 判断两个ip地址是否在同一个网段内
网段
局域网的概念
外网ip 我们谁都能访问
内网ip 从外部不能访问,只能在内部环境中互相访问
外网ip永远不会和内网ip冲突?
端口:
端口的概念 —— 帮助你找到一个应用
每一个网络服务都会占用计算机上的一个端口
计算机上的端口范围 0-65535
在同一时刻 同一台计算机上 不同的网络应用 占用的端口一定是不同的
osi七层模型
应用层 http、https
传输层 TCP、UDP协议
网络层 ip协议
数据链路层 arp协议
物理层
理解socket
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,
Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用
户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
tcp协议与udp协议
tcp 面向连接的 可靠的 但是慢
tcp协议
两个应用之间要想通信 必须先建立连接
然后基于连接来通信
比较重要的文件 邮件的发送 下载安装包
udp 无连接的 快 能够发送的信息长度是有限的
快 但 不可靠 不能发送过长的数据
即时通讯类的程序
socket的初始
基于tcp协议的socket的应用
Server段
import socket sk = socket.socket() # 初始化一个对象 sk.bind((‘127.0.0.1‘,9000)) # 把地址绑定到socket sk.listen() # 监听链接 conn,addr = sk.accept() # 接受客户端链接 msg = conn.recv(1024) # 接受客户端信息 print(msg.decode(‘utf-8‘)) # 打印 conn.send(‘你好‘.encode(‘utf-8‘)) # 向客户端发送信息 conn.close() # 关闭客户端 sk.close() # 关闭服务器
Client端
import socket sk = socket.socket() sk.connect((‘127.0.0.1‘,9000)) sk.send(‘哈哈‘.encode(‘utf-8‘)) msg = sk.recv(1024) print(msg.decode(‘utf-8‘)) sk.close()
基于UDP协议的socket应用
Server端
import socket sk = socket.socket(type = socket.SOCK_DGRAM) sk.bind((‘127.0.0.1‘,9000)) msg,addr = sk.recvfrom(1024) print(addr,msg.decode(‘utf-8‘)) sk.sendto(‘再见‘.encode(‘utf-8‘),addr) sk.close()
Client端
import socket sk = socket.socket(type= socket.SOCK_DGRAM) sk.sendto(‘你好‘.encode(‘utf-8‘),(‘127.0.0.1‘,9000)) msg,addr = sk.recvfrom(1024) print(addr,msg.decode(‘utf-8‘)) sk.close()
大文件的存储
Server端
import socket import time sk = socket.socket() sk.bind((‘127.0.0.1‘,9000)) sk.listen() conn,addr = sk.accept() filename = conn.recv(1024) print(‘>>>‘,filename.decode(‘utf-8‘)) with open(filename,‘wb‘) as f: countent = conn.recv(4096) f.write(countent) conn.close() sk.close()
Client端
import socket import time sk = socket.socket() sk.connect((‘127.0.0.1‘,9000)) sk.send(‘答案‘.encode(‘utf-8‘)) time.sleep(0.1) with open(‘D:骑士计划第二次测试答案‘,‘rb‘) as f: countent = f.read() print(‘大小>>>‘,len(countent)) sk.send(countent) sk.close()
以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装