node拼接udp請求包

2021-09-19 04:50:51 字數 2810 閱讀 7923

標籤: nodejs udp tcp buffer

1byte代表的是乙個位元組,是檔案儲存的最小單位。在基本檔案單位中,我們有以下的等價關係。 1m = 1024 k,1k = 1024 byte。

1bit代表則是乙個binary digit(二進位制數字)。說人話,就是1010101中的乙個1或者0。

tcp/udp協議中,比較廣泛的定義是1 byte = 8 bit,這個定義不是嚴格的。換句話說,你可以選擇不遵守。

在計算機網路的七層協議中,這兩個是傳輸層的協議,我們常用的http協議屬於一種特殊的tcp連線。一般情況下,我們將tcp連線通過ip作為位址關聯,通過握手的方式連線,所以tcp協議又被稱為是tcp/ip協議。udp協議則是一種更為暴力的協議,一般沒有握手的過程,我們經常會把它用在dns的查詢上面。

tcp和udp的區別

區別udp

tcp連線性

面向非連線

面向連線

傳輸可靠性

不可靠可靠

應用場景

少量資料

傳輸大量資料速度快

慢 好了,我們先複習到這裡。如果還有不知道的,請qq你們的計算機網路老師。

對於tcp/http協議的場景,大家其實都是比較熟悉的,成熟的框架大家都是用的六六的,所以這裡就不再贅述,下文將著重於表達udp協議。

嗯,我們先來看一下乙個簡單的udp的例子。

// server.js

const dgram = require('dgram');

const server = dgram.createsocket('udp4');

server.on('error', (err) => `);

server.close();

});server.on('message', (msg, rinfo) => from $:$`);

});server.on('listening', () => :$`);

});server.bind(41234,()=>);

// server listening 0.0.0.0:41234

const dgram = require('dgram');

const message = buffer.from('some bytes');

const client = dgram.createsocket('udp4');

client.send(message, 41234, 'localhost', (err) => );

**還是很簡單的。使用到的庫是dgram這個庫是node自帶的,直接require就ok,有關的事件如下:

常用的方法函式,如下:

具體的函式介紹和使用說明,請參閱官方文件。對於乙個簡單udp協議,使用的時候,我們一般將會把監聽和請求合併封裝在一起,作為乙個統一服務。

var dgram = require('dgram');

var server = dgram.createsocket('udp4')

var port = 0;

var targetport = 123;

var targetip = 10.10.10.10;//這裡也可以支援用網域名稱,它會自己做dns解析

function sendandrecv(targetport,targetip,desport,message,callback) from $:$`);

callback&&callback(message.tostring());

//這裡要注意哦,msg的型別是buffer哦!})}

})})

}

buffer物件的使用

js嘛,還是比較簡單的。我們直接看**吧。

//例項化

var buf = new buffer();

//寫buf.write("***xx");

//讀buf.readint8();

具體的型別說明和函式使用,請參考官方文件。

我們這裡著重說一下踩過的坑。在buffer物件中,使用的是byte記位。也就是說,對於如下:

var buf = new buffer(1);// 1 byte == 8bit 可以寫入 0x00 = 0000 0000 

buf.writeint8(0x00);

//不同的長度,在寫入的時候,要使用不同的函式,具體需要使用到的函式請參考,上文給出的官方文件。

function getbuffer(value, length)

}

這裡順帶加乙個函式,如何把十進位制的ip string轉換成整型資料的js實現。

function ip2int(ip) |1\d\d|2[0-4]\d|25[0-5])\.(\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|1\d\d|2[0-4]\d|25[0-5])$/;

var xh = "", result = reg.exec(ip);

if (!result) return false;

return (parseint(result[1]) << 24

| parseint(result[2]) << 16

| parseint(result[3]) << 8

| parseint(result[4]));

}ip2int("10.10.10.10");//168430090

node操作目錄,路徑拼接

一 先引入核心模組 var fs require fs 一 建立目錄 建立了乙個名為demo的檔案 fs.mkdir demo err 二 刪除空目錄 空目錄是當前目錄下沒有任何檔案或資料夾 刪除了乙個名為demo的空資料夾 fs.rmdir demo err 三 讀取遍歷目錄 fs.readdir...

node處理get請求

看node已經有一段時間了,因為放假比較懶,沒有更新node。還是比較坑。年初沒專案哪只能來填填坑啦。如題,這篇寫node如何處理get請求。對於乙個前端碼農來說,後台給我們的第一印象就是介面,這也是為何前端工程師學node的原因。這篇就是說乙個get請求在node的環境下如何處理的。話不多說先貼 ...

node的其他包

為解決國內使用者連線npm registry緩慢的問題,搭建了自己的registry,即 npm映象源 過去,npm沒有提供修改registry的功能,因此,提供了乙個cli工具即cnpm,它支援除了npm publish以外的所有命令,只不過連線的是 映象源 如今,npm已經支援修改registr...