IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> python UDP笔记 -> 正文阅读

[网络协议]python UDP笔记

#用于探测报文的主动端,启动2个线程共用一个socket,
#一个线程负责发送报文,另1个线程负责接收
#可以考虑把3个链路的主动端,启动6个线程,线程函数共用
#传递的参数不同即可。

#用于探测报文的主动端,启动2个线程共用一个socket,
#一个线程负责发送报文,另1个线程负责接收
#可以考虑把3个链路的主动端,启动6个线程,线程函数共用
#传递的参数不同即可。
#3个本地socket,绑定端口号不同,发送的目的端口号也不同
import threading
import socket

# 定义发送的方法,后期用线程方式调用,方法内部进行循环发送数据
def send_msg(udp_socket, ip, port):
    #while True:
    msg = 'A'*1024
    udp_socket.sendto(msg.encode('gbk'), (ip, port))

# 定义接收的方法,后期用线程方式调用,方法内部进行循环接收数据
def recv_msg(udp_socket):
    #while True:
    recv_data = udp_socket.recvfrom(1024)
    print('received[%s:%s]:%s' % (recv_data[1][0], recv_data[1][1], recv_data[0].decode('gbk')))

def main():
    # 创建套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 绑定端口
    local_addr = ('192.168.1.102', 6666)
    udp_socket.bind(local_addr)
    # 循环接收或发送udp信息
    dst_ip = "192.168.1.101"
    dst_port = int(30001)
    # 创建收和发两个线程
    send = threading.Thread(target=send_msg, args=(udp_socket, dst_ip, dst_port))
    recv = threading.Thread(target=recv_msg, args=(udp_socket,))
    # 启动线程
    send.start()
    recv.start()

if __name__ == "__main__":
    main()

# 这是链路探测被动端的程序,接收到报文后直接转发回去。
# 可以启动3个线程就可以完成被动段回复的所有任务,提供的参数就是,
# 监听的ip地址,需要监听的端口
#3个线程的需要监听的ip地址相同,唯一区别的就是端口号

# 这是链路探测被动端的程序,接收到报文后直接转发回去。
# 可以启动3个线程就可以完成被动段回复的所有任务,提供的参数就是,
# 监听的ip地址,需要监听的端口
#3个线程的需要监听的ip地址相同,唯一区别的就是端口号

import threading
import socket

def recvAndSend(local_ip,port):
    # 1.创建一个接收报文的udp套接字
    udp_recv_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 1.创建一个udp转发套接字
    udp_send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2.绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
    # 30000  表示本地的端口 ip一般不用写
    local_addr = (local_ip, port)
    udp_recv_socket.bind(local_addr)
    
    while True:
        # 3. 等待接收对方发送的数据
        recv_data = udp_recv_socket.recvfrom(1024)  
        # 1024表示本次接收的最大字节数

        # 6. 显示对方发送的数据
        # 接收到的数据recv_data是一个元组
        # 第1个元素是对方发送的数据
        # 第2个元素是对方的ip和端口
        print(recv_data[0].decode('gbk'))
        print(recv_data[1])

        # 2.准备接收方的地址
        # 192.168.65.149 表示目的地ip
        # 30000  表示目的地端口
        udp_send_socket.sendto(recv_data[0], recv_data[1])


def main():
    local_ip="192.168.1.101"
    port_1=int(30001)
    port_2=int(30002)
    port_3=int(30003)
    thread_1=threading.Thread(target=recvAndSend,args=(local_ip,port_1))
    thread_2=threading.Thread(target=recvAndSend,args=(local_ip,port_2))
    thread_3=threading.Thread(target=recvAndSend,args=(local_ip,port_3))
    thread_1.start()
    thread_2.start()
    thread_3.start()


if __name__ == "__main__":
    main()

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:51:11  更:2021-07-13 17:52:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:28:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码