UDP 通信
程序员文章站
2022-06-08 16:28:36
...
高级编程技巧 学习笔记
一、UDP 发送数据
-
创建套接字
-
使用套接字收/发数据
-
关闭套接字
import socket
def main():
# 创建一个udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
send_data = '666'
# encode
# Windows 默认 gbk
udp_socket.sendto(send_data.encode('gbk'), ('192.168.0.105', 8080))
udp_socket.close()
if __name__ == '__main__':
main()
- 循环发送
import socket
def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 没有绑定的话 端口就是随机分配的
udp_socket.bind(("", 7890))
while True:
send_data = input('请输入要发送的数据:')
if send_data == 'exit':
break
send_data = send_data.encode('gbk')
udp_socket.sendto(send_data, ('192.168.0.161', 8080))
udp_socket.close()
if __name__ == '__main__':
main()
二、UDP 接收数据
-
创建套接字
-
绑定本地信息(IP和端口)
-
接收数据
-
打印数据
-
关闭套接字
import socket
def main():
# 1.创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.绑定本地信息
# 不写ip 表示本机的任何一个ip
bind_addr = ('', 7789)
udp_socket.bind(bind_addr)
while True:
# 3.接收数据
# 1024 表示本次接收的最大字节数
recv_data = udp_socket.recvfrom(1024)
# 元组 接收到的数据 (发送方的ip,端口)
# print(recv_data)
# (b'1', ('192.168.0.161', 8080))
recv = recv_data[0]
send_data = recv_data[1]
# 4.打印数据
print("发送端:%s \n内容:%s" % (str(send_data), recv.decode('gbk')))
# 5.关闭套接字
udp_socket.close()
if __name__ == '__main__':
main()
端口绑定问题:
如果程序运行时,没有绑定端口,那么操作系统会自动分配一个端口给程序。 而且同一端口,不能用两次。
三、简单 UDP 聊天器
import socket
def send_data(udp_socket):
"""发送数据"""
send_data = input('请输入要发送的数据:') # haha
dest_ip = input('请输入要发送的IP:') # 127.0.0.1
dest_port = int(input('请输入要发送的端口:')) # 7788
udp_socket.sendto(send_data.encode('gbk'), (dest_ip, dest_port))
def recv_data(udp_socket):
"""接收数据"""
recv_data = udp_socket.recvfrom(1024)
print("%s:%s" % (recv_data[1], recv_data[0].decode('gbk')))
def main():
# 创建套接字 同时接收发送数据
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定
udp_socket.bind(("", 7788))
while True:
# 发送
send_data(udp_socket)
# 接收
recv_data(udp_socket)
if __name__ == '__main__':
main()
上一篇: MAC系统中添加MYSQL开机启动的方法
下一篇: 下载下来的网站不能登录什么有关问题