Ⅰ 採用UDP方式接收和發送的包的最大長度是多少
P數據報的最大長度是65535位元組
UDP數據報中用戶數據的最大長度是65507位元組(因為要出去20個位元組的IP首部和8個位元組UDP的首部)
Ⅱ C#中UDP數據存儲和處理如何實現
您好,這樣的:
1.Visual C# UdpClient類發送UDP數據包:
在具體使用中,一般分成二種情況:
(1). 知道遠程計算機IP地址:
"Send"方法的調用語法如下:
public int Send ( byte[] dgram , int bytes , IPEndPoint endPoint ) ;
參數說明:
dgram 要發送的 UDP 數據文報(以位元組數組表示)。
bytes 數據文報中的位元組數。
endPoint 一個 IPEndPoint,它表示要將數據文報發送到的主機和埠。
返回值 已發送的位元組數。
下面使用UdpClient發送UDP數據包的具體的調用例子:
IPAddress HostIP = new IPAddress.Parse ( "遠程計算機IP地址" ) ;
IPEndPoint host = new IPEndPoint ( HostIP , 8080 ) ;
UdpClient.Send ( "發送的位元組" , "發送的位元組長度" , host ) ;
(2). 知道遠程計算機名稱:
知道遠程計算機名稱後,利用"Send"方法直接把UDP數據包發送到遠程主機的指定埠號上了,這種調用方式也是最容易的,語法如下:
public int Send ( byte[ ] dgram , int bytes , string hostname , int port ) ;
參數說明:
dgram 要發送的 UDP 數據文報(以位元組數組表示)。
bytes 數據文報中的位元組數。
hostname 要連接到的遠程主機的名稱。
port 要與其通訊的遠程埠號。
返回值 已發送的位元組數。
2.Visual C# UdpClient類接收UDP數據包:
接收UDP數據包使用的是UdpClient中的「Receive"方法。此方法的調用語法如下:
public byte [] Receive ( ref IPEndPoint remoteEP ) ;
參數說明:
remoteEP 是一個 IPEndPoint類的實例,它表示網路中發送此數據包的節點。
如果指定了遠程計算機要發送到本地機的埠號,也可以通過偵聽本地埠號來實現對數據的獲取,下面就是通過偵聽本地埠號「8080"來獲取信息代碼:
server = new UdpClient ( ) ;
receivePoint = new IPEndPoint (new IPAddress ( "127.0.0.1" ) , 8080 ) ;
byte[] recData = server.Receive ( ref receivePoint ) ;
Ⅲ linux下怎麼設置udp接收緩存最大值
vi /etc/sysctl.conf
增加或修改 net.ipv4.udp_mem項
net.ipv4.udp_mem = min pressure max
再設一下 net.ipv4.udp_rmem_min
具體含義man udp 查看
完成後執行 sysctl -p 生效
Ⅳ 怎麼把收到的UDP數據批量存儲到資料庫
Transact-SQL 參考
BULK INSERT
以用戶指定的格式復制一個數據文件至資料庫表或視圖中。
語法
BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' }
[ WITH
(
[ BATCHSIZE [ = batch_size ] ]
[ [ , ] CHECK_CONSTRAINTS ]
[ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ]
[ [ , ] DATAFILETYPE [ =
{ 'char' | 'native'| 'widechar' | 'widenative' } ] ]
[ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ]
[ [ , ] FIRSTROW [ = first_row ] ]
[ [ , ] FIRE_TRIGGERS ]
[ [ , ] FORMATFILE = 'format_file_path' ]
[ [ , ] KEEPIDENTITY ]
[ [ , ] KEEPNULLS ]
[ [ , ] KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ]
[ [ , ] LASTROW [ = last_row ] ]
[ [ , ] MAXERRORS [ = max_errors ] ]
[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]
[ [ , ] ROWS_PER_BATCH [ = rows_per_batch ] ]
[ [ , ] ROWTERMINATOR [ = 'row_terminator' ] ]
[ , [ TABLOCK ] ]
)
]
參數
'database_name'
是包含指定表或視圖的資料庫的名稱。如果未指定,則系統默認為當前資料庫。
'owner'
是表或視圖所有者的名稱。當執行大容量復制操作的用戶擁有指定的表或視圖時,owner 是可選項。如果沒有指定 owner 並且執行大容量復制操作的用戶不擁有指定的表或視圖,則 Microsoft® SQL Server™ 將返回錯誤信息並取消大容量復制操作。
'table_name'
是大容量復制數據於其中的表或視圖的名稱。只能使用那些所有的列引用相同基表所在的視圖。有關向視圖中復制數據的限制的更多信息,請參見 INSERT。
'data_file'
是數據文件的完整路徑,該數據文件包含要復制到指定表或視圖的數據。BULK INSERT 從磁碟復制數據(包括網路、軟盤、硬碟等)。
data_file 必須從運行 SQL Server 的伺服器指定有效路徑。如果 data_file 是遠程文件,則請指定通用命名規則 (UNC) 名稱。
BATCHSIZE [ = batch_size ]
指定批處理中的行數。每個批處理作為一個事務復制至伺服器。SQL Server提交或回滾(在失敗時)每個批處理的事務。默認情況下,指定數據文件中的所有數據是一個批處理。
CHECK_CONSTRAINTS
指定在大容量復制操作中檢查 table_name 的任何約束。默認情況下,將會忽略約束。
CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ]
指定該數據文件中數據的代碼頁。僅當數據含有字元值大於 127 或小於 32 的 char、varchar 或 text 列時,CODEPAGE 才是適用的。
CODEPAGE 值 描述
ACP char、varchar 或 text 數據類型的列從 ANSI/Microsoft Windows® 代碼頁 ISO 1252 轉換為 SQL Server 代碼頁。
OEM(默認值) char、varchar 或 text 數據類型的列被從系統 OEM 代碼頁轉換為 SQL Server 代碼頁。
RAW 並不進行從一個代碼頁到另一個代碼頁的轉換;這是最快的選項。
code_page 特定的代碼頁號碼,例如 850。
DATAFILETYPE [ = {'char' | 'native' | 'widechar' | 'widenative' } ]
指定 BULK INSERT 使用指定的默認值執行復制操作。
DATAFILETYPE 值 描述
char(默認值) 從含有字元數據的數據文件執行大容量復制操作。
native 使用 native(資料庫)數據類型執行大容量復制操作。要裝載的數據文件由大容量復制數據創建,該復制是用 bcp 實用工具從 SQL Server 進行的。
widechar 從含有 Unicode 字元的數據文件中執行大容量復制操作。
widenative 執行與 native 相同的大容量復制操作,不同之處是 char、varchar 和 text 列在數據文件中存儲為 Unicode。要裝載的數據文件由大容量復制數據創建,該復制是用 bcp 實用工具從 SQL Server 進行的。該選項是對 widechar 選項的一個更高性能的替代,並且它用於使用數據文件從一個運行 SQL Server 的計算機向另一個計算機傳送數據。當傳送含有 ANSI 擴展字元的數據時,使用該選項以便利用 native 模式的性能。
FIELDTERMINATOR [ = 'field_terminator' ]
指定用於 char 和 widechar 數據文件的欄位終止符。默認的欄位終止符是 \t(製表符)。
FIRSTROW [ = first_row ]
指定要復制的第一行的行號。默認值是 1,表示在指定數據文件的第一行。
FIRE_TRIGGERS
指定目的表中定義的任何插入觸發器將在大容量復制操作過程中執行。如果沒有指定 FIRE_TRIGGERS,將不執行任何插入觸發器。
FORMATFILE [ = 'format_file_path' ]
指定一個格式文件的完整路徑。格式文件描述了含有存儲響應的數據文件,這些存儲響應是使用 bcp 實用工具在相同的表或視圖中創建的。格式文件應該用於以下情況:
數據文件含有比表或視圖更多或更少的列。
列使用不同的順序。
列分割符發生變化。
數據格式有其它的改變。通常,格式文件通過 bcp 實用工具創建並且根據需要用文本編輯器修改。有關更多信息,請參見 bcp 實用工具。
KEEPIDENTITY
指定標識列的值存在於導入文件中。如果沒有指定 KEEPIDENTITY,在導入的數據文件中此列的標識值將被忽略,並且 SQL Server 將根據表創建時指定的種子值和增量值自動賦給一個唯一的值。假如數據文件不含該表或視圖中的標識列,使用一個格式文件來指定在導入數據時,表或視圖中的標識列應被忽略;SQL Server 自動為此列賦予唯一的值。有關詳細信息,請參見 DBCC CHECKIDENT。
KEEPNULLS
指定在大容量復制操作中空列應保留一個空值,而不是對插入的列賦予默認值。
KILOBYTES_PER_BATCH [ = kilobytes_per_batch ]
指定每個批處理中數據的近似千位元組數(KB)。默認情況下,KILOBYTES_PER_BATCH 未知。
LASTROW [ = last_row ]
指定要復制的最後一行的行號。默認值是 0,表示指定數據文件中的最後一行。
MAXERRORS [ = max_errors ]
指定在大容量復制操作取消之前可能產生的錯誤的最大數目。不能被大容量復制操作導入的每一行將被忽略並且被計為一次錯誤。如果沒有指定 max_errors,默認值為 0。
ORDER ( { column [ ASC | DESC ] } [ ,...n ] )
指定數據文件中的數據如何排序。如果裝載的數據根據表中的聚集索引進行排序,則可以提高大容量復制操作的性能。如果數據文件基於不同的順序排序,或表中沒有聚集索引,ORDER 子句將被忽略。給出的列名必須是目的表中有效的列。默認情況下,大容量插入操作假設數據文件未排序。
n
是表示可以指定多列的佔位符。
ROWS_PER_BATCH [ = rows_per_batch ]
指定每一批處理數據的行數(即 rows_per_bacth)。當沒有指定 BATCHSIZE 時使用,導致整個數據文件作為單個事務發送給伺服器。伺服器根據 rows_per_batch 優化大容量裝載。默認情況下,ROWS_PER_BATCH 未知。
ROWTERMINATOR [ = 'row_terminator' ]
指定對於 char 和 widechar 數據文件要使用的行終止符。默認值是 \n(換行符)。
TABLOCK
指定對於大容量復制操作期間獲取一個表級鎖。如果表沒有索引並且指定了 TABLOCK,則該表可以同時由多個客戶端裝載。默認情況下,鎖定行為是由表選項 table lock on bulk load 決定的。只在大容量復制操作期間控制鎖會減少表上的鎖爭奪,極大地提高性能。
注釋
BULK INSERT 語句能在用戶定義事務中執行。對於一個用 BULK INSERT 語句和 BATCHSIZE 子句將數據裝載到使用多個批處理的表或視圖中的用戶定義事務來說,回滾它將回滾所有發送給 SQL Server 的批處理。
許可權
只有 sysadmin 和 bulkadmin 固定伺服器角色成員才能執行 BULK INSERT。
示例
本例從指定的數據文件中導入訂單詳細信息,該文件使用豎杠 (|) 字元作為欄位終止符,使用 |\n 作為行終止符。
BULK INSERT Northwind.dbo.[Order Details]
FROM 'f:\orders\lineitem.tbl'
WITH
(
FIELDTERMINATOR = '|',
ROWTERMINATOR = '|\n'
)
本例指定 FIRE_TRIGGERS 參數。
BULK INSERT Northwind.dbo.[Order Details]
FROM 'f:\orders\lineitem.tbl'
WITH
(
FIELDTERMINATOR = '|',
ROWTERMINATOR = ':\n',
FIRE_TRIGGERS
)
請參見
bcp 實用工具
排序規則
在不同排序規則間復制數據
使用 bcp 和 BULK INSERT
並行數據裝載
sp_tableoption
Ⅳ UDP是什麼,UDP協議及優缺點
UDP,全稱 User Datagram Protocol,中文名稱為用戶數據報協議,主要用來支持那些需要在計算機之間傳輸數據的網路連接。
UDP 協議從問世至今已經被使用了很多年,雖然目前 UDP 協議的應用不如 TCP 協議廣泛,但 UDP 依然是一種非常實用和可行的網路傳輸層協議。尤其是在一些實時性很強的應用場景中,比如網路游戲、視頻會議等,UDP 協議的快速能力更具有獨特的魅力。
UDP 是一種面向非連接的協議,面向非連接指的是在正式通信前不必與對方先建立連接,不管對方狀態就直接發送數據。至於對方是否可以接收到這些數據,UDP 協議無法控制,所以說 UDP 是一種不可靠的協議。
UDP 協議適用於一次只傳送少量數據、對可靠性要求不高的應用環境。
與前面介紹的 TCP 協議一樣,UDP 協議直接位於 IP 協議之上。實際上,IP 協議屬於 OSI 參考模型的網路層協議,而 UDP 協議和 TCP 協議都屬於傳輸層協議。
因為 UDP 是面向非連接的協議,沒有建立連接的過程,因此它的通信效率很高,但也正因為如此,它的可靠性不如 TCP 協議。
UDP 協議的主要作用是完成網路數據流和數據報之間的轉換在信息的發送端,UDP 協議將網路數據流封裝成數據報,然後將數據報發送出去;在信息的接收端,UDP 協議將數據報轉換成實際數據內容。
可以認為 UDP 協議的 socket 類似於碼頭,數據報則類似於集裝箱。碼頭的作用就是負責友送、接收集裝箱,而 socket 的作用則是發送、接收數據報。因此,對於基於 UDP 協議的通信雙方而言,沒有所謂的客戶端和伺服器端的概念。
UDP 協議和 TCP 協議簡單對比如下:
TCP 協議:可靠,傳輸大小無限制,但是需要連接建立時間,差錯控制開銷大。
UDP 協議:不可靠,差錯控制開銷較小,傳輸大小限制在 64 KB以下,不需要建立連接。
?相比較 TCP,UDP 是一種不可靠的網路協議,它在通信實例的兩端各建立一個 socket,但這兩個 socket 之間並沒有虛擬鏈路,它們只是發送、接收數據報的對象。
Ⅵ 怎麼寫udp接收伺服器連續發來的信息,並把信息存儲在資料庫里
Transact-SQL 參考
BULK INSERT
以用戶指定的格式復制一個數據文件至資料庫表或視圖中。
語法
BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' }
[ WITH
(
[ BATCHSIZE [ = batch_size ] ]
[ [ , ] CHECK_CONSTRAINTS ]
[ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ]
[ [ , ] DATAFILETYPE [ =
{ 'char' | 'native'| 'widechar' | 'widenative' } ] ]
[ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ]
[ [ , ] FIRSTROW [ = first_row ] ]
[ [ , ] FIRE_TRIGGERS ]
[ [ , ] FORMATFILE = 'format_file_path' ]
[ [ , ] KEEPIDENTITY ]
[ [ , ] KEEPNULLS ]
[ [ , ] KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ]
[ [ , ] LASTROW [ = last_row ] ]
[ [ , ] MAXERRORS [ = max_errors ] ]
[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]
[ [ , ] ROWS_PER_BATCH [ = rows_per_batch ] ]
[ [ , ] ROWTERMINATOR [ = 'row_terminator' ] ]
[ , [ TABLOCK ] ]
)
]
Ⅶ 客戶端使用UDP協議不停的向伺服器發送數據,Java這邊需要存儲這些數據並進行處理,如何監控這個數據
2個方法,設置2個變數分別記載當前處理的queue下標A,(假設你的queue是結構體數組長度200),還有個表量記載還沒有操作的總數B。
1.保證每個數據都接收。即時沒有處理完也接收,循環加,從0-199再循環,另一個線程處理,從當前標記A開始往下處理,沒處理完一個A+1 B-1,接收線程沒接收一個B+1,B一直循環,QUEUE[B]接收數據,一定要注意,這2個變數和你的數組要加鎖,防止2個線程同時被修改
2.保證處理,如果沒處理完就不接收,加到B到上限就停止,但數據也是循環的存儲,其他方法和上面一樣,就是要注意加鎖
以上說的方法是數據先進先出,如果想做先進後出的話,就每次處理當前A的數據,然後向前回溯就可以了
Ⅷ UDP、TCP 協議的區別
一、TCP協議
TCP位於傳輸層, 提供可靠的位元組流服務。所謂的位元組流服務(Byte Stream Service) 是指, 為了方便傳輸, 將大塊數據分割成以報文段(segment) 為單位的數據包進行管理。 而可靠的傳輸服務是指, 能夠把數據准確可靠地傳給對方。 即TCP 協議為了更容易傳送大數據才把數據分割, 而且 TCP 協議能夠確認數據最終是否送達到對方。所以,TCP連接相當於兩根管道(一個用於伺服器到客戶端,一個用於客戶端到伺服器),管道裡面數據傳輸是通過位元組碼傳輸,傳輸是有序的,每個位元組都是一個一個來傳輸。
(1)、三次握手:握手過程中使用了 TCP 的標志(flag) —— SYN(synchronize) 和ACK(acknowledgement) 。
第一次握手:建立連接時,客戶端A發送SYN包(SYN=j)到伺服器B,並進入SYN_SEND狀態,等待伺服器B確認。
第二次握手:伺服器B收到SYN包,必須確認客戶A的SYN(ACK=j+1),同時自己也發送一個SYN包(SYN=k),即SYN+ACK包,此時伺服器B進入SYN_RECV狀態。
第三次握手:客戶端A收到伺服器B的SYN+ACK包,向伺服器B發送確認包ACK(ACK=k+1),此包發送完畢,完成三次握手。
此外,還有快速重傳和快速恢復,停止-等待協議,回退N幀協議,選擇重傳協議等。
二、UDP協議:
無連接協議,也稱透明協議,也位於傳輸層。
三、兩者區別:
1) TCP提供面向連接的傳輸,通信前要先建立連接(三次握手機制); UDP提供無連接的傳輸,通信前不需要建立連接。
2) TCP提供可靠的傳輸(有序,無差錯,不丟失,不重復); UDP提供不可靠的傳輸。
3) TCP面向位元組流的傳輸,因此它能將信息分割成組,並在接收端將其重組; UDP是面向數據報的傳輸,沒有分組開銷。
4) TCP提供擁塞控制和流量控制機制; UDP不提供擁塞控制和流量控制機制。
四、長連接和短連接
HTTP的長連接和短連接本質上是TCP長連接和短連接。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網路層使用IP協議。 IP協議主要解決網路路由和定址問題,TCP協議主要解決如何在IP層之上可靠地傳遞數據包,使得網路上接收端收到發送端所發出的所有包,並且順序與發送順序一致。TCP協議是可靠的、面向連接的。
在HTTP/1.0中默認使用短連接。也就是說,客戶端和伺服器每進行一次HTTP操作,就建立一次連接,任務結束就中斷連接。當客戶端瀏覽器訪問的某個HTML或其他類型的Web頁中包含有其他的Web資源(如JavaScript文件、圖像文件、CSS文件等),每遇到這樣一個Web資源,瀏覽器就會重新建立一個HTTP會話。
而從HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭加入這行代碼:
Connection:keep-alive
在使用長連接的情況下,當一個網頁打開完成後,客戶端和伺服器之間用於傳輸HTTP數據的TCP連接不會關閉,客戶端再次訪問這個伺服器時,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的伺服器軟體(如Apache)中設定這個時間。實現長連接需要客戶端和服務端都支持長連接。
HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。
Ⅸ java中使用UDP接收的數據放在哪裡了呢,
先了解下網路七層協議,知道網路通訊是怎麼回事。
第7層 應用層:OSI中的最高層。為特定類型的網路應用提供了訪問OSI環境的手段。應用層確定進程之間通信的性質,以滿足用戶的需要。應用層不僅要提供應用進程所需要的信息交換和遠程操作,而且還要作為應用進程的用戶代理,來完成一些為進行信息交換所必需的功能。它包括:文件傳送訪問和管理FTAM、虛擬終端VT、事務處理TP、遠程資料庫訪問RDA、製造報文規范MMS、目錄服務DS等協議;
第6層 表示層:主要用於處理兩個通信系統中交換信息的表示方式。為上層用戶解決用戶信息的語法問題。它包括數據格式交換、數據加密與解密、數據壓縮與恢復等功能;
第5層 會話層:—在兩個節點之間建立端連接。為端系統的應用程序之間提供了對話控制機制。此服務包括建立連接是以全雙工還是以半雙工的方式進行設置,盡管可以在層4中處理雙工方式 ;
第4層 傳輸層:—常規數據遞送-面向連接或無連接。為會話層用戶提供一個端到端的可靠、透明和優化的數據傳輸服務機制。包括全雙工或半雙工、流控制和錯誤恢復服務;
第3層 網路層:—本層通過定址來建立兩個節點之間的連接,為源端的運輸層送來的分組,選擇合適的路由和交換節點,正確無誤地按照地址傳送給目的端的運輸層。它包括通過互連網路來路由和中繼數據 ;
第2層 數據鏈路層:—在此層將數據分幀,並處理流控制。屏蔽物理層,為網路層提供一個數據鏈路的連接,在一條有可能出差錯的物理連接上,進行幾乎無差錯的數據傳輸。本層指定拓撲結構並提供硬體定址;
第1層 物理層:處於OSI參考模型的最底層。物理層的主要功能是利用物理傳輸介質為數據鏈路層提供物理連接,以便透明的傳送比特流。
數據發送時,從第七層傳到第一層,接收數據則相反。
上三層總稱應用層,用來控制軟體方面。下四層總稱數據流層,用來管理硬體。