UDP传输层数据传输python connect to nodejs


前言

我们知道Internet传输层提供的传输服务有两种: TCP服务和UDP服务;
TCP服务的特点在于,面向连接,是一种基于连接的协议,在进行通信之前,首先要求客户机与服务器进程之间建立连接,从而进行可靠传输;UDP的特点在于无连接,即在通信之前不需要建立客户机与服务器进程间的联系,是一种面向非连接的协议,可以直接把数据包发送给对方;基于这个原因,UPD也是一种不可靠的协议,但是其传输速度比TCP更快,因此更适用于实时通信的场合。
使用dgram模块实现基于UDP的数据通信


一、python搭建UDP发送消息

1.创建套接字
2.使用套接字收/发数据
3.关闭套接字

# 引入套接字模块
import socket
import configparser

ip = "localhost"
port = 2021
numId = "D100001"
# 创建UDP套接字 Socket socket.AF_INET 服务器之间网络通信  socket.SOCK_DGRAM 数据报式socket 
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送UDP数据
udp_socket.sendto(bytes('{"action":"intru","numId":"'+numId+'"}', encoding="utf-8"), (ip, port))
# 关闭套接字
udp_socket.close()
# 接受TCP套接字的数据
# data = udp_socket.recv(4096)
# print(data.decode("utf-8"))

二、Nodejs搭建UDP服务器

在Node.js中,提供了dgram模块,用于创建UPD服务器与客户端,以及实现UDP服务器与客户端之间的通信。

var dgram = require('dgram');

var udp_server = dgram.createSocket('udp4');	//创建 udp server
udp_server.bind(2021); // 绑定端口

let python_socket = {};
// 监听端口
udp_server.on('listening', function () {
    console.log('udp server linstening 2021.');
})

//接收消息
udp_server.on('message', function (msg, rinfo) {
    console.log("message on the python :" + typeof (msg) + " msg : " + msg);
    //本身就是Object,有时又不是;需要具体分析出来--只在connect的时候才是字符串,json字符串创建对象
    var msg_python = JSON.parse(msg.toString())
    var id = msg_python.numId.toString() || "D100001";
    //rinfo.address 属性值为发送者所使用的地址 socket端口号 当前时间Date
    python_socket[id] = { address: rinfo.address, port: rinfo.port, timeStamp: new Date() };   
    console.log("socket_python:", python_socket[id]);

    switch (msg_python.action) {
        var date = new Date();
        case "intru":
            console.log("---------------------intru--------------------------")
            console.log("from python ", JSON.stringify(msg_python));
            break;
        default:
            console.log("---------------------other--------------------------");
            console.log("python_socket :" + JSON.stringify(msg_python) + date );
            break;
    }
})
//错误处理
udp_server.on('error', function (err) {
    console.log('some error on udp server.')
    udp_server.close();
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值