5、基于UDP套接字

UDP套接字

UDP是无链接的,先启动哪一端都不会报错;

UDP是没有listen的,listen实际上的目的就是要等待连接的接入,而UDP是没有连接的,它根本就不会像TCP一样首先建立连接,所以就没必要建立连接;

UDP和UDP通信在建立连接的时候无需进行握手协议,直接通信即可,所以可见它是一个不安全的协议

UDP简单通讯

import socket

sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

sock.sendto(b'caichangen',('192.168.2.29',8080))

sock.close()

5、基于UDP套接字

UDP服务端

ss = socket() #创建一个服务器的套接字

ss.bind() #绑定服务器套接字

inf_loop: #服务器无限循环

cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)

ss.close() # 关闭服务器套接字

UDP客户端

cs = socket() # 创建客户套接字

comm_loop: # 通讯循环

cs.sendto()/cs.recvfrom() # 对话(发送/接收)

cs.close() # 关闭客户套接字

聊天示例

UDP服务端

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2018/3/2 15:12

# @Author : CaiChangEn

# @Software: PyCharm

from socket import *

IP_PORT=('0.0.0.0',8080)

UDP_SERVER=socket(AF_INET,SOCK_DGRAM) #AF_INET:基于网络的套接字,SOCK_DGRAM:数据报式的套接字,也就是UDP套接字

UDP_SERVER.bind(IP_PORT)

while True:

data,addr=UDP_SERVER.recvfrom(BUFFER_SIZE) # 收的是一个元祖,第一个是发送的数据,第二个是客户端的IP和端口

print(data.decode('utf-8'))

UDP_SERVER.sendto(data,addr)

客户端

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2018/3/2 15:12

# @Author : CaiChangEn

# @Software: PyCharm

from socket import *

IP_PORT=('127.0.0.1',8080)

UDP_CLIENT=socket(AF_INET,SOCK_DGRAM)

while True:

msg=input('请输入要发送的消息(q/Q退出):')

if msg == 'Q' or msg == 'q':

UDP_CLIENT.close()

break

else:

UDP_CLIENT.sendto(msg.encode('utf-8'),IP_PORT)

data,addr=UDP_CLIENT.recvfrom(BUFFER_SIZE)

print(data.decode('utf-8'))


分享到:


相關文章: