① 如何連續接收udp報文
UDP包UDP報頭由4個域組成,其中每個域各佔用2個位元組,具體如下:源埠號目標埠號數據報長度校驗值 UDP協議使用埠號為不同的應用保留其各自的數據傳輸通道。UDP和TCP協議正是採用這一機制實現對同一時刻內多項應用同時發送和接收數據的支持。數據發送一方(可以是客戶端或伺服器端)將UDP數據報通過源埠發送出去,而數據接收一方則通過目標埠接收數據。有的網路應用只能使用預先為其預留或注冊的靜態埠;而另外一些網路應用則可以使用未被注冊的動態埠。因為UDP報頭使用兩個位元組存放埠號,所以埠號的有效范圍是從0到65535。一般來說,大於49151的埠號都代表動態埠。TCP包 每個tcp都包含源埠號和目標埠號,加上ip頭中的源ip和目的ip,唯一確定一個tcp連接。序號用來標識從tcp發端向tcp收端發送的數據位元組流,它表示在這個報文段中的第一個數據位元組。序號欄位包含由這個主機選擇的該連接的初始序號isn(Initial Sequence Number)。該主機要發送數據的第一個位元組,序號為isn+1,因為syn佔用了一個序號。IP包 IPV4報頭有12個必需的欄位和可選IP選項欄位,位於要發送的數據之前。如果使用IP層已有的庫或其他組件,一般不必考慮報頭中的大多數欄位,但程序代碼需要提供源端和目的端地址。1、版本(4比特) IP協議版本已經經過多次修訂,1981年的RFC0791描述了IPV4,RCF2460中介紹了IPV6。2、報頭長度(4比特) 報頭長度是報頭數據的長度,以4位元組表示,也就是以32位元組為單位。報頭長度是可變的。必需的欄位使用20位元組(報頭長度為5,IP選項欄位最多有40個附加位元組(報頭長度為15)。3、服務類型(8比特) 該欄位給出發送進程建議路由器如何處理報片的方法。可選擇最大可靠性、最小延遲、最大吞吐量和最小開銷。路由器可以忽略這部分。4、數據報長度(16比特) 該欄位是報頭長度和數據位元組的總和,以位元組為單位。最大長度為65535位元組。5、標識符(16比特) 原是數據的主機為數據報分配一個唯一的數據報標識符。在數據報傳向目的地址時,如果路由器將數據報分為報片,那麼每個報片都有相同的數據標識符。6、標志(3比特)標志欄位中有2為與報片有關。 位0:未用。 位1:不是報片。如果這位是1,則路由器就不會把數據報分片。路由器會盡可能把數據報傳給可一次接收整個數據報的網路;否則,路由器會放棄數據報,並返回 差錯報文,表示目的地址不可達。IP標准要求主機可以接收576位元組以內的數據報,因此,如果想把數據報傳給未知的主機,並想確認數據報沒有因為大小的原 因而被放棄,那麼就使用少於或等於576位元組的數據。 位2:更多的報片。如果該位為1,則數據報是一個報片,但不是該分片數據報的最後一個報片;如果該位為0,則數據報沒有分片,或者是最後一個報片。7、報片偏移(13比特) 該欄位標識報片在分片數據報中的位置。其值以8位元組為單位,最大為8191位元組,對應65528位元組的偏移。 例如,將要發送的1024位元組分為576和424位元組兩個報片。首片的偏移是0,第二片的偏移是72(因為72×8=576)。8、生存時間(8比特) 如果數據報在合理時間內沒有到達目的地,則網路就會放棄它。生存時間欄位確定放棄數據報的時間。 生存時間表示數據報剩餘的時間,每個路由器都會將其值減一,或遞減需要數理和傳遞數據報的時間。實際上,路由器處理和傳遞數據報的時間一般都小於1S,因此該值沒有測量時間,而是測量路由器之間跳躍次數或網段的個數。發送數據報的計算機設置初始生存時間。9、協議(8比特) 該欄位指定數據報的數據部分所使用的協議,因此IP層知道將接收到的數據報傳向何處。TCP協議為6,UDP協議為17。10、報頭檢驗和(16比特) 該字端使數據報的接收方只需要檢驗IP報頭中的錯誤,而不校驗數據區的內容或報文。校驗和由報頭中的數值計算而得,報頭校驗和假設為0,乙太網幀和TCP報文段以及UDP數據報中的可選項都需要進行報文檢錯。11、源IP地址(32比特) 表示數據報的發送方。12、目的IP地址(32比特) 表示數據報的目的地。
② 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協議能發送和接收的是什麼數據
完全可以。計算機在發送數據時,都是以二進制數據的形式發送的,至於這些二進制的具體內容,是不關心的。
⑤ C++接收UDP數據
可以啊。
typedefstruct
{
charchIP[16];
unsignedcharBuf[128];
}REC_UNIT;
CArray<REC_UNIT,REC_UNIT&>m_Array;
接收數據時,聲明一個REC_UNITRecUnit。分別對結構體成員賦值。然後m_Array.Add(RecUnit)
⑥ 如何實現udp伺服器程序多次接收和發送數據
是指和一個客戶端之間的數據重傳還是很多數據的發送,或者是和多個客戶端之間的並發數據傳送?
⑦ UDP接收到數據,如何轉換成字元串
Java的List有兩個:一個是java.util.List,另外一個是java.awt.List;
不知道你要說的是哪個?不管你說的是哪個,先看我以下代碼:
List list = new ArrayList();
list.add("str1");
list.add("str2");
System.out.println(list);
運行結果: [str1, str2]
產生這個結果的原因是Java給你使用的java.util.List已經重寫了Object的方法toString(),所以直接列印的時候會將數據自動轉成String都列印出來;
如果你說的是java.awt.List,那麼你可以效仿java.util.List,重寫toString().
⑧ UDP客戶端接收數據
Calculate the number of lines per page.
PrintPreviewDialog pPDlg;
build_os='darwin11.4.0d1'
build_vendor='apple'Calculate the number of lines per page.
PrintPreviewDialog pPDlg;
build_os='darwin11.4.0d1'
build_vendor='apple'
⑨ 怎麼寫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 ] ]
)
]
⑩ 怎麼用MATLAB做UDP協議接受數據
發送端
tic;
load('data_test.mat');
s=cell(200,200); %定義待傳輸的數據
for i=1:200;
for j=1:200;
for k=1:201;
b(k)=data_test_im(i,j,k);%深度位數據
end
s(i,j)={[11,i,j,b]};%待傳輸數據
end
end
u1 = udp('127.0.0.1', 'RemotePort', 8866, 'LocalPort', 8844);%定義udp埠號和ip
u1.OutputBufferSize=8192;%傳數據buffer大小
u1.Timeout=1000;%傳輸時間限制
fopen(u1);
for i=1:200;
for j=1:200;
aa=s(i,j);
A=aa{:};
%flag=fread(u1,1,'char');
fwrite(u1,A,'double'); %傳數據
end
flag=fread(u1,1,'char');
end
fclose(u1);
delete(u1);
clear u1;
toc;
接收端
tic;
u2 = udp('127.0.0.1', 'RemotePort', 8844, 'LocalPort', 8866);
u2.InputBufferSize =8192;
u2.TimeOut=100;
fopen(u2);
u2.DatagramTerminateMode='off';
C=zeros(204,40000);
for i=1:40000;
%fwrite(u2,flag,'char');
if(mod(i,200)~=0)
C(:,i)=fread(u2,204,'float32');
else
fwrite(u2,flag,'char');
end
end
fclose(u2);
delete(u2);
clear u2;
toc;