| UDP | TCP ---|---|--- 链接| 无链接 | 面向链接 速度| 无需创建链接,速度较快 | 须要创建链接,速度较慢 目的主机 | 一对一,一对多 | 仅能一对一 带宽 | UDP报头较短,消耗带宽更少 | 消耗更多的带宽(报文较大) 消息边界 | 有 | 无 可靠性 | 低 | 高 顺序 | 无序 | 有序node
事实上,UDP 协议的这种乱序性基本上不多出现,一般只会在网络很是拥堵的状况下出现;安全
何时用TCP?何时用UDP ?服务器
const dgram = require('dgram') const socket = dgram.createSocket('udp4')
API | 说明 |
---|---|
bind() | 绑定端口和主机 |
address() | 返回Socket地址对象 |
close() | 关闭Socket并中止监听 |
send() | 发送消息 |
addMembership() | 添加组播成员 |
dropMembership() | 删除组播成员 |
setBroadcast() | 设置是否启用广播 |
setTTL() | 设置数据报生存时间 |
setMulticastTTL() | 设置组播数据报生存时间 |
API | 说明 |
---|---|
listening | 监听成功时触发,仅触发一次 |
message | 收到消息时触发 |
error | 发生错误时触发 |
close | 关闭socket时触发 |
#####. 使用Node实现UDP单播 |
const dgram = require('dgram') const socket = dgram.createSocket('udp4') socket.on('listening', () =>{ console.log('链接成功') })
若是客户端没有绑定端口号,操做系统会自动分配一个端口号;若是指定了端口号,必须在socket的listening事件成功后才能send消息;网络
const dgram = require('dgram'); const server = dgram.createSocket('udp4'); server.on('listening', r => { console.log('链接成功server:'); }); server.on('message', (msg, remoteAddress) => { console.log(`成功链接到${remoteAddress.address}:${remoteAddress.port}`); server.send('服务器说:小子我收到你的消息了', remoteAddress.port); }); server.on('close', () => { console.log('error'); }); server.bind(3000);
const dgram = require('dgram'); const client = dgram.createSocket('udp4'); client.on('listening', () => { const address = client.address(); console.log(`成功链接到${address.address}:${address.port}`); // 直接地址:192.168.10.255 把后三位改为255就能够 // 受限地址: 255.255.255.255 client.send('hello', 3000, 'localhost'); }); client.on('message', (msg, remoteAddress) => { console.log(`客户端说收到服务器的消息了${msg}`); }); client.on('error', () => { console.log('server errord'); }); client.bind(3200);
// 在监听成功后,开启广播模式 server.on('listening', () =>{ server.setBroadcast(true) })
server.jssocket
// 只用在发送消息时,指定组播ip就能够了 server.on('listening', () => { server.send('发送组播消息', 3300, '224.0.1.100', (err) =>{ console.log(err) }) })
client.jsui
client.on('listening', () =>{ // 监听成功后加入特定组播组的ip,此时客户端就会收到组播数据 client.addMemberShip('224.0.1.100') } )