* 链路层(物理层,数据链路层),网络层,传输层,应用层 (会话层,表示层,应用层)
网际层 = 网络层
链路层 = 网络接口层
为TCP协议通信提供服务的端口
80:HTTP
21:FTP
IP地址被用来给Internet上的电脑一个编号。
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。
作用: 将某个IP地址划分成网络地址和主机地址两部分。
百科传送门
使用socket模块:
socket.socket(AddressFamily, Type)
* Address Family:(实际⼯作常⽤AF_INET)
* AF_INET ⽤于Internet进程间通信
* AF_UNIX ⽤于同⼀台机器进程间通信
* Type:套接字类型
* SOCK_STREAM 流式套接字,主要⽤于TCP协议
* SOCK_DGRAM 数据报套接字,主要⽤于UDP协议)
创建一个TCP套接字:
import socket
`s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
创建一个UDP套接字:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
UDP: 用户数据报协议
创建udp客户端流程具体步骤:
1. 创建客户端套接字。
2. 发送/接收数据。
3. 关闭套接字。
示例:
#coding=utf-8
from socket import *
#1.创建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
#2.准备接收⽅的地址
sendAddr = ('192.168.1.103', 8080)
#3.从键盘获取数据
sendData = raw_input("请输⼊要发送的数据:")
#4.发送数据到指定的电脑上
udpSocket.sendto(sendData, sendAddr)
#5.关闭套接字
udpSocket.close()
#coding=utf-8
from socket import *
#1.创建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
#2.准备接收⽅的地址
sendAddr = ('192.168.1.103', 8080)
#3.从键盘获取数据
sendData = raw_input("请输⼊要发送的数据:")
#4.发送数据到指定的电脑上
udpSocket.sendto(sendData, sendAddr)
#5.等待接收对⽅发送的数据
recvData = udpSocket.recvfrom(1024) # 1024表示本次接收的最⼤字节数
#6.显示对⽅发送的数据
print(recvData)
#7.关闭套接字
udpSocket.close()
bindAddr = ('',7788)udpSocket.bind(bindAddr) #ip地址和端⼝号,ip⼀般不⽤写,表示本机的任何⼀个ip
recvData = udpSocket.recvfrom(1024) #1024表示本次接收的最⼤字节数
python2中:
udpSocket = sendto("haha",("192.168.111.111"),8080)
python3中:
* 需要加类型b
udpSocket = sendto("haha",(b"192.168.111.111"),8080)
* 输入数据需要编码:
udpSocket.sendto(sendData.encode("utf-8"),(destIP,destPort))
encode("utf-8")
decode("utf-8")
其中"gb2312"
为计算机通用
示例代码:(网络调试助手)
from socket import *
udpSocket = socket(AF_INET, SOCK_DGRAM)
udpSocket.bind(("",7799))
recvData = udpSocket.recvfrom(1024)
content,destInfo = recvData
print("ontent is %s" %content.decode("gb2312"))
接收到数据后再发回去
recvData = udpSoket.recvfrom(1024)
# 将数据发回去:
udpSocket.sendto(recvData[0],recvData[1])