| 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') } )