socket(套接字)
发数据
1.流程:创建套接字----->使用套接字收/发数据------>关闭
2. 创建一个tcp socket
import socket
#创建套接字
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #stream 流,小河,流播
#使用套接字....
#关闭套接字
s.close()
3.创建一个udp socket
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #dgram离散可控性,可观性
s.close()
4.创建socket说明
在python中使用socket模块的函数就可以完成
socket.socket(参数1,参数2)
参数1:
可以选择AF_INET(用于internet进程间通信),或者AF_UNIX(用于同一台机器进程间通信)
参数2:
套接字类型:可以是SOCK_STREAM(流式套接字,主要用于tcp)或者是SOCK_DGGRAN(数据报套接字)
5.实例:
import socket
def main():
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('xx.x.x.x'),7788) #绑定ip和端口号
s.sendto(b'haha',('x.x.x.x',6666)) #两个参数。第一个是字节型的发送内容,第二个为元组型,包括目的ip和端口号
'''
或者
send_data=input('请输入数据:')
s.sendto(send_data.encode('utf-8'),('xx.x.x.x.',6666))
'''
s.close()
if __name__ == '__main__':
main()
网络调试助手显示:
收数据
def recive_udp():
#建立连接器
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定本地的相关信息,如果不稳定会随机分配
local_adr=("xx.xx.xx.xx",7788) #ip地址和端口号 ,ip一般不用写,表示本机ip
udp_socket.bind(local_adr) #传入的是元组
#等待接受对方发送的数据
recv_data=udp_socket.recvfrom(1024) #表示本次接受的最大字节数
#打印
print(recv_data[0].decode('gbk'))
#关闭
udp_socket.close()
案列
import socket
def main():
udp_sockrt=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #udp
udp_sockrt.bind(('x.x.x.x',7788))
desc_ip=input('请输入目的ip:')
desc_port=input('输入目的端口:')
send_mes=input('发送内容:')
#发送
udp_sockrt.sendto(send_mes.encode('utf-8'),(desc_ip,int(desc_port)))
#接受
rec_data=udp_sockrt.recvfrom(1024)
print(rec_data[0].decode('gbk')) #显示
udp_sockrt.close()
if __name__ == '__main__':
main()
单工:数据传输是单向的。通信双方中,一方固定为发送端,一方则固定为接收端(收音机)
半双工:半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。
全工:全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,举例:电话通信。