IP:识别主机
端口号:识别进程
网络基础-协议:
- 网络接口层(链路层)【物理层,数据链路层】
- 网络层
- 传输层
- 应用层【会话层,表示层,应用层】
Socket
- 通过网络完成进程间的通信方式
- 本质是编程接口(API):是Socket对TCP/IP协议的封装
- 三个步骤:服务监听,客户端请求,连接确认
创建Socket:
import socket
#导入套接字模块
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s此时是一个socket对象,拥有发送和接收网络数据的功能
该函数带有两个参数(参数必须写)
AF_INET(ipv4协议⽤于 Internet 进程间通信)
套接字类型, 可以是 SOCK_STREAM(流式套接字, ⽤于TCP 协议) 或者 SOCK_DGRAM(数据报套接字,⽤于 UDP 协议)
TCP慢但是稳定不会丢数据,传输控制协议
UDP快但是可能会丢数据(黑客攻击),用户数据报协议
确定了IP地址端口号(ipv4协议),TCP或UDP协议之后,计算机之间可以进行通信
Socket编程-UDP
发送数据
from socket import *
s=socket(AF_INET,SOCK_DGRAM) #创建套接字
addr=('192.168.1.105',8080) #准备接受方地址
data=input('请输入:')
s.sendto(data.encode('gb2312'),addr)
#发送数时,python3需要将字符串转换成byte
#encode('utf-8')用utf-8进行编码,获得byte类型对象
#dencode()反过来
s.close()
给飞秋发送消息
飞秋使用:2425端口
发送普通数据,飞秋不会响应,必须发送特殊格式的内容1:123123:吴彦祖:吴彦祖-pc:32:haha飞秋有自己的应用层协议
1,表示版本
后面的数字发送的时间,随便写
32代表发送消息
飞秋炸弹:循环不延时发消息(可能会造成卡死)
注意:IP和端口在网络通信中缺一不可,用到的协议也要匹配,例如飞秋用的是udp协议,使用TCP协议发数据是无效的
udp理解为写信(只有收件人地址),TCP理解为打电话(先拨号建立通路,需要通路稳定)
from socket import *
s=socket(AF_INET,SOCK_DGRAM) #创建套接字
addr=('192.168.1.105',2425) #准备接受方地址
# data=input('请输入:')
s.sendto('1:123:亢森槟:小亢的电脑:32:你好'.encode('gb2312'),addr)
#发送数时,python3需要将字符串转换成byte
#encode('utf-8')用utf-8进行编码,获得byte类型对象
#dencode()反过来
s.close()
接收数据
from socket import *
s=socket(AF_INET,SOCK_DGRAM)
addr=('192.168.1.105',8080)
#发送数据
data=input('请输入:')
s.sendto(data.encode('gb2312'),addr)
#接收数据
redata=s.recvfrom(2048)
print(redata[0].decode('gb2312'))
s.close()