python udp

本文介绍了Python实现UDP通信的过程,包括客户端和服务端的创建,基于UDP的简单聊天软件,广播发送和飞Q轰炸。还提及了UDP网络唤醒的概念,涉及发送和接收数据的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要建立2个文件,一个作为客户端,一个作为服务端
注意:先运行文件二在运行文件一,是为了达到谁给你发送信息都可以先接受,其实先后顺序都可以

一 发送数据

udp的特点是不需要建立连接
文件一客户端
#不需要建立连接
import socket
#创建socket对象
#SOCK_DGRAM udp模式
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #后面两个编号就是2
idAdress=‘192.168.14.144’
port=8081
while True:
byteA=(‘请输入内容:’).encode(‘gbk’)
end=soc.sendto(byteA,(idAdress,port))
# print(‘over!!!’,end)

二 接受数据

from socket import *
soc=socket(2,2)
soc.bind((‘192.168.14.130’,8085)) #自己的端口号 可以自己改变 然后绑定自己的端口号
while True:
recoveDate=soc.recvfrom(1024)
print(recoveDate[1],recoveDate[0].decode(‘gbk’)) #接收到的开始是数据 后面是ip地址端口号

基于udp的聊天软件

在这里插入图片描述
import socket
import threading
import json
import os,sys
#读取配置
def readJson(path=‘ipAddress.json’):
if os.path.exists(path):
with open(path) as f_r:
return json.load(f_r)
else:
ip=input(“请输入您要发送的IP地址?”)
port=int(input(‘请输入您要发送的端口号?’))
temp={“ip”: ip, “port”: port}
with open(path,‘w’) as f_w:
json.dump(temp,f_w)
return temp
def send(soc,destAddress):# 发送
while True:
data=input(“请输入发送数据?”).encode(‘gbk’)
if data!=b’q’:
soc.sendto(data,destAddress)
print(“发送成功–>>:%s,数据:%s”%(destAddress,data.decode(‘gbk’)))
else:
sys.exit()
def recv(soc:socket.socket):# 接收
while True:
data,ipAdress=soc.recvfrom(1024)
print(‘来自>>’,ipAdress,data.decode(‘gbk’))
#对方的ip地址和端口
destAddress=(readJson()[‘ip’],readJson()[‘port’])
if name == ‘main’:
soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # socket对象
soc.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 重新使用端口和ip
soc.bind((’’, 8088)) # 【绑定自己的ip和端口】
threading.Thread(target=recv,args=(soc,)).start() # 开启读线程
threading.Thread(target=send,args=(soc,destAddress)).start() #开启发送线程

广播发送

import socket
import threading
def send(soc):
byteA = input(“请输入数据?”).encode(‘gbk’)
soc.sendto(byteA,broadCast) #【发送 广播 数据】
soc = socket.socket(2,2)
soc.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) #【开启广播】
soc.bind((‘192.168.14.134’,8088)) #[绑定的本地的]
broadCast = (‘192.168.14.255’,8080) # 【广播地址】
threading.Thread(target=send,args=(soc,)).start()
while True:
data,ipAddress=soc.recvfrom(1024)
print(ipAddress,data.decode(‘gbk’))

飞Q轰炸

#飞Q 数据协议:
#版本号:版本号:用户名:主机号:指令:数据
import socket
import time
soc=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
soc.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) #开启广播
broadAddress=(‘192.168.14.255’,2425) #【广播发送】
endByte=“1:1:匿名用户:匿名主机:32:你好”.encode(‘gbk’)
while True:
soc.sendto(endByte,broadAddress)
print(‘发送成功!’)
time.sleep(1)

还有一个使用udp网络唤醒,不作为强制要求

#网络唤醒包:
#6个 FF
#16个 Mac
allMac=’’‘50-da-00-da-d2-f4
54-bf-64-34-d0-82
10-1f-74-e7-23-32
c8-5b-76-98-80-f7
d8-c4-97-bd-cd-ce
00-e0-4c-36-86-be
e4-e7-49-49-af-07
2c-56-dc-ae-e2-8a
e4-11-5b-5e-c7-e2
e4-11-5b-52-b5-a2
54-e1-ad-a8-53-81
10-1f-74-e6-68-29
f8-32-e4-23-ca-02
e4-11-5b-59-66-3e
a0-1d-48-ba-01-a2
84-34-97-23-cf-98
34-97-f6-b7-bf-98
68-f7-28-b0-bb-1f
34-97-f6-b7-c0-6b
e8-6a-64-37-00-10
f4-8e-38-ee-7e-88
54-ab-3a-e0-3e-af
10-1f-74-f1-d6-ac
e4-11-5b-52-05-4d’’’
import socket
def getMagic(x):
listA=[]
for i in x.split(’-’):
listA.append(int(i,16)) #将 16进制的mac地址转换为 对应的10进制
return bytes([255]*6)+bytes(listA)*16
allMac=allMac.splitlines()
for i in range(len(allMac)):
allMac[i]=allMac[i].strip()
# print(allMac[i])
temp=getMagic(allMac[i])
soc=socket.socket(2,2) # UDP 协议
soc.setsockopt(65535,32,1) # 广播
soc.sendto(temp,(‘192.168.14.255’,9))
print(‘发送成功!’,i)

#什么TCP/IP协议?
#什么是IP地址?
#子网掩码
#网关
#DHCP服务器
#DNS服务器
#…
#什么是Mac地址?
#什么是端口号?
#什么socket?
#UDP : 基于数据报 的
#import socket
#socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#UDP特点: 不安全 ,无连接, 支持 广播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值