衛(wèi)星導(dǎo)航定位算法與程序設(shè)計(jì)-第17課gnss高級編程技巧簡介_第1頁
衛(wèi)星導(dǎo)航定位算法與程序設(shè)計(jì)-第17課gnss高級編程技巧簡介_第2頁
衛(wèi)星導(dǎo)航定位算法與程序設(shè)計(jì)-第17課gnss高級編程技巧簡介_第3頁
衛(wèi)星導(dǎo)航定位算法與程序設(shè)計(jì)-第17課gnss高級編程技巧簡介_第4頁
衛(wèi)星導(dǎo)航定位算法與程序設(shè)計(jì)-第17課gnss高級編程技巧簡介_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

主講:劉暉副教授武漢大學(xué)衛(wèi)星導(dǎo)航定位技術(shù)研究中心衛(wèi)星導(dǎo)航定位算法與程序設(shè)計(jì)第十七講GNSS高級編程技巧簡介內(nèi)容通信接口編程

二進(jìn)制協(xié)議編解碼通信接口編程技巧內(nèi)容1、通訊方式及有關(guān)概念2、RS-232串口通訊簡介3、RS-232串口通訊編程4、TCP/IP協(xié)議簡介5、TCP/IP網(wǎng)絡(luò)通訊編程通訊方式與外界的信息交換稱為通訊?;就ㄓ嵎绞讲⑿型ㄓ崳阂粭l信息的各位數(shù)據(jù)被同時傳送的通訊方式串行通訊:一條信息的各位數(shù)據(jù)依次傳送的通訊方式通信方式—并行通訊并行通訊的特點(diǎn)是:各數(shù)據(jù)位同時傳送,傳送速度快、效率高,但有多少數(shù)據(jù)位就需多少根數(shù)據(jù)線,因此傳送成本高,且只適用于近距離(相距數(shù)米)的通訊。并行接口:主要作為打印機(jī)端口,接口使用的不再是36針接頭而是25針D形接頭。所謂“并行”,是指8位數(shù)據(jù)同時通過并行線進(jìn)行傳送現(xiàn)在有五種常見的并口:4位、8位、半8位、EPP和ECP,大多數(shù)PC機(jī)配有4位或8位的并口,。標(biāo)準(zhǔn)并行口4位、8位、半8位:4位口一次只能輸入4位數(shù)據(jù),但可以輸出8位數(shù)據(jù);8位口可以一次輸入和輸出8位數(shù)據(jù);半8位也可以。EPP口(增強(qiáng)并行口):由Intel等公司開發(fā),允許8位雙向數(shù)據(jù)傳送,可以連接各種非打印機(jī)設(shè)備,如掃描儀、LAN適配器、磁盤驅(qū)動器和CDROM驅(qū)動器等。ECP口(擴(kuò)展并行口):由Microsoft、HP公司開發(fā),能支持命令周期、數(shù)據(jù)周期和多個邏輯設(shè)備尋址,在多任務(wù)環(huán)境下可以使用DMA(直接存儲器訪問)。單工、半雙工和全雙工的定義如果在通信過程的任意時刻,信息只能由一方A傳到另一方B,則稱為單工。如果在任意時刻,信息既可由A傳到B,又能由B傳A,但只能由一個方向上的傳輸存在,稱為半雙工傳輸。如果在任意時刻,線路上存在A到B和B到A的雙向信號傳輸,則稱為全雙工。數(shù)據(jù)傳輸方向--------><-------->-------->A-------BA--------BA-------B

<-----------------單工半雙工全雙工電話線就是二線全雙工信道。由于采用了回波抵消技術(shù),雙向的傳輸信號不致混淆不清。雙工信道有時也將收、發(fā)信道分開,采用分離的線路或頻帶傳輸相反方向的信號,如回線傳輸。目前常接觸的通訊方式

計(jì)算機(jī)的通信接口

串口RS-232TCP/IP網(wǎng)絡(luò)C/C++/C#等均支持通信接口編程,編程方式有:標(biāo)準(zhǔn)庫函數(shù)或API編程,適用于嵌入式系統(tǒng)、高可靠性系統(tǒng)編程,優(yōu)點(diǎn)是效率高,可靠性好,缺點(diǎn)是編程復(fù)雜,控件編程,利用第三方庫函數(shù),優(yōu)點(diǎn)編程簡便,缺點(diǎn)是可靠性不高,效率有限

內(nèi)容1、通訊方式及有關(guān)概念2、RS-232串口通訊簡介3、RS-232串口通訊編程4、TCP/IP協(xié)議簡介5、TCP/IP網(wǎng)絡(luò)通訊編程串行通訊:一條信息的各位數(shù)據(jù)被逐位按順序傳送的通訊方式稱為串行通訊。串行通訊的特點(diǎn)是:數(shù)據(jù)位傳送,傳按位順序進(jìn)行,最少只需一根傳輸線即可完成,成本低但送速度慢。串行通訊的距離可以從幾米到幾千米。根據(jù)信息的傳送方向,串行通訊可以進(jìn)一步分為單工、半雙工和全雙工三種。串口通信標(biāo)準(zhǔn),EIARS-232C串行通訊的概念能夠完成上述“串<-->并”轉(zhuǎn)換功能的電路,通常稱為“通用異步收發(fā)器”(UART:UniversalAsynchronousReceiverandTransmitter),典型的芯片有:Intel8250/8251,16550。

串口通訊的接口電路Windows中用于串口通信的超級終端數(shù)據(jù)位與停止位波特率(bps):110到468080數(shù)據(jù)位:1位、2位停止位:1位、1.5位、2位流控制:解決丟失數(shù)據(jù)的問題

硬件流控制:

RTS/CTS(請求發(fā)送/清除發(fā)送)DTR/DSR(數(shù)據(jù)終端就緒/數(shù)據(jù)設(shè)置就緒)

軟件流控制:XON/XOFF。奇偶校驗(yàn)奇校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1”的個數(shù)為奇數(shù),如:10110,010100110,0001偶校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1”的個數(shù)為偶數(shù),如:10100,010100100,0001連接器的機(jī)械特性串口通信基本接線方法

9針串口(DB9)

25針串口(DB25)

針號功能說明縮寫針號功能說明縮寫1數(shù)據(jù)載波檢測DCD8數(shù)據(jù)載波檢測DCD2接收數(shù)據(jù)RXD3接收數(shù)據(jù)RXD3發(fā)送數(shù)據(jù)TXD2發(fā)送數(shù)據(jù)TXD4數(shù)據(jù)終端準(zhǔn)備DTR20數(shù)據(jù)終端準(zhǔn)備DTR5信號地GND7信號地GND6數(shù)據(jù)設(shè)備準(zhǔn)備好DSR6數(shù)據(jù)準(zhǔn)備好DSR7請求發(fā)送RTS4請求發(fā)送RTS8清除發(fā)送CTS5清除發(fā)送CTS9振鈴指示DELL22振鈴指示DELLRS-232C的接口信號

DSRDTRRS-232C規(guī)標(biāo)準(zhǔn)接口有25條線,4條數(shù)據(jù)線、11條控制線、3條定時線、7條備用和未定義線,常用的只有9根,它們是:(1)聯(lián)絡(luò)控制信號線:數(shù)據(jù)裝置準(zhǔn)備好(Datasetready-DSR)——有效時(ON)狀態(tài),表明通信裝置處于可以使用的狀態(tài)。數(shù)據(jù)終端準(zhǔn)備好(Datasetready-DTR)——有效時(ON)狀態(tài),表明數(shù)據(jù)終端可以使用。這兩個信號有時連到電源上,一上電就立即有效。這兩個設(shè)備狀態(tài)信號有效,只表示設(shè)備本身可用,并不說明通信鏈路可以開始進(jìn)行通信了,能否開始進(jìn)行通信要由下面的控制信號決定。RS-232C的接口信號

——RTSCTS請求發(fā)送(Requesttosend-RTS)——用來表示DTE請求DCE發(fā)送數(shù)據(jù),即當(dāng)終端要發(fā)送數(shù)據(jù)時,使該信號有效(ON狀態(tài)),向MODEM請求發(fā)送。它用來控制MODEM是否要進(jìn)入發(fā)送狀態(tài)。允許發(fā)送(Cleartosend-CTS)——用來表示DCE準(zhǔn)備好接收DTE發(fā)來的數(shù)據(jù),是對請求發(fā)送信號RTS的響應(yīng)信號。當(dāng)MODEM已準(zhǔn)備好接收終端傳來的數(shù)據(jù),并向前發(fā)送時,使該信號有效,通知終端開始沿發(fā)送數(shù)據(jù)線TxD發(fā)送數(shù)據(jù)。這對RTS/CTS請求應(yīng)答聯(lián)絡(luò)信號是用于半雙工MODEM系統(tǒng)中發(fā)送方式和接收方式之間的切換。在全雙工系統(tǒng)中作發(fā)送方式和接收方式之間的切換。在全雙工系統(tǒng)中,因配置雙向通道,故不需要RTS/CTS聯(lián)絡(luò)信號,使其變高。RS-232C的接口信號

——DCDRI接收線信號檢出(ReceivedLinedetection-RLSD)——用來表示DCE已接通通信鏈路,告知DTE準(zhǔn)備接收數(shù)據(jù)。當(dāng)本地的MODEM收到由通信鏈路另一端(遠(yuǎn)地)的MODEM送來的載波信號時,使RLSD信號有效,通知終端準(zhǔn)備接收,并且由MODEM將接收下來的載波信號解調(diào)成數(shù)字兩數(shù)據(jù)后,沿接收數(shù)據(jù)線RxD送到終端。此線也叫做數(shù)據(jù)載波檢出(DataCarrierdectection-DCD)線。振鈴指示(Ringing-RI)——當(dāng)MODEM收到交換臺送來的振鈴呼叫信號時,使該信號有效(ON狀態(tài)),通知終端,已被呼叫。RS-232C的接口信號

——TxDRxD(2)數(shù)據(jù)發(fā)送與接收線:

發(fā)送數(shù)據(jù)(Transmitteddata-TxD)——通過TxD終端將串行數(shù)據(jù)發(fā)送到MODEM,(DTE→DCE)。

接收數(shù)據(jù)(Receiveddata-RxD)——通過RxD線終端接收從MODEM發(fā)來的串行數(shù)據(jù),(DCE→DTE)。(3)地線

有兩根線SG、PG——信號地和保護(hù)地信號線,無方向。內(nèi)容1、通訊方式及有關(guān)概念2、RS-232串口通訊簡介3、RS-232串口通訊編程4、TCP/IP協(xié)議簡介5、TCP/IP網(wǎng)絡(luò)通訊編程RS-232編程基本流程流程打開串口配置串口寫串口讀串口關(guān)閉串口串口編程的基本方式使用VC++提供的串行通信控件m在單線程中實(shí)現(xiàn)自定義的串口通信類讀寫多線程串行通信以下以WindowsAPI函數(shù)為例介紹串口通信編程(1/3)用于串行通信的函數(shù)和結(jié)構(gòu)在winbase.h頭文件中定義。在基于Windows的設(shè)備上通過串行通信端口讀寫的任務(wù)由調(diào)用文件讀寫函數(shù)完成。CreateFile打開串行口。mState獲取串口的當(dāng)前控制設(shè)置數(shù)據(jù)。串口通信編程(2/3)mState按照DCB結(jié)構(gòu)的數(shù)據(jù)配置串行口。mTimeouts獲得指定通信設(shè)備上所有讀/寫操作的超時參數(shù)。mTimeouts設(shè)置指定通信設(shè)備上所有讀/寫操作的超時參數(shù)。WriteFile向串行口寫數(shù)據(jù),這樣將把數(shù)據(jù)傳送給串行口連接的另一端設(shè)備。串口通信編程(3/3)ReadFile從串行口讀數(shù)據(jù),這樣將接收串行口連接另一端的設(shè)備傳過來的數(shù)據(jù)。mMask指定為通信設(shè)備監(jiān)視的一組事件。Mask獲得指定通信設(shè)備的事件掩碼值。初始化串行口首先用CreateFile函數(shù)打開指定串口,設(shè)置其中的參數(shù)訪問類型為GENERIC_READ|GENERIC_WRITE共享模式為0創(chuàng)建標(biāo)志為OPEN_EXISTING模板句柄為NULL如果端口不存在,則返回ERROR_FILE_NOT_FOUNDCreateFile函數(shù)原型(1)打開串口:Win32系統(tǒng)把文件的概念進(jìn)行了擴(kuò)展。無論是文件、通信設(shè)備、命名管道、郵件槽、磁盤、還是控制臺,都是用API函數(shù)CreateFile來打開或創(chuàng)建。該函數(shù)的原型為:

HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDdwCreationDistribution,DWORDdwFlagsAndAttributes,HANDLEhTemplateFile);

lpFileName:將要打開的串口邏輯名,如“COM1”;

dwDesiredAccess:指定串口訪問的類型,可以是讀取、寫入或二者并列;

dwShareMode:指定共享屬性,由于串口不能共享,該參數(shù)必須置為0;

lpSecurityAttributes:引用安全性屬性結(jié)構(gòu),缺省值為NULL;

dwCreationDistribution:創(chuàng)建標(biāo)志,對串口操作該參數(shù)必須置為OPEN_EXISTING;

dwFlagsAndAttributes:屬性描述,用于指定該串口是否進(jìn)行異步操作,該值為FILE_FLAG_OVERLAPPED,表示使用異步的I/O;該值為0,表示同步I/O操作;

hTemplateFile:對串口而言該參數(shù)必須置為NULL;初始化串口——示例同步I/O方式打開串口的示例代碼: HANDLE;//全局變量,串口句柄 =CreateFile("COM1"1口 GENERIC_READ|GENERIC_WRITE,//允許讀和寫 0,//獨(dú)占方式 NULL, OPEN_EXISTING,//打開而不是創(chuàng)建 0,//同步方式 NULL); if(==(HANDLE)-1) { AfxMessageBox("打開COM失敗!"); returnFALSE; } returnTRUE;配置串口設(shè)置波特率、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位和流控制方式,并且可以恢復(fù)缺省值。使用mState(m,&dcb)讀取當(dāng)前串口設(shè)備控制塊DCB(DeviceControlBlock)設(shè)置。修改后通過mState(m,&dcb)將其寫入。DCB結(jié)構(gòu)原型typedefstruct_DCB{DWORDBaudRate;………//波特率,指定通信設(shè)備的傳輸速率。CBR_110,…DWORDfParity;//指定奇偶校驗(yàn)使能。若此成員為1,允許奇偶校驗(yàn)檢查

BYTEByteSize;//通信字節(jié)位數(shù),4—8BYTEParity;//指定奇偶校驗(yàn)方法。EVENPARITY偶NOPARITY無校驗(yàn)MARKPARITY標(biāo)記校驗(yàn)ODDPARITYBYTEStopBits;//指定停止位的位數(shù)。ONESTOPBIT1位TWOSTOPBITS2位ONE5STOPBITS1.5位停止位

………}DCB;配置串口——示例DCBPortDCB;PortDCB.DCBlength=sizeof(DCB);mState(hSerial,&PortDCB);//讀DCBPortDCB.BaudRate=115200;//波特率PortDCB.ByteSize=8;//數(shù)據(jù)位PortDCB.Parity=NOPARITY;//校驗(yàn)位PortDCB.StopBits=ONESTOPBIT;//停止位mState(hSerial,&PortDCB);//寫DCB配置串口———緩沖區(qū)設(shè)置一般還需要設(shè)置I/O緩沖區(qū)的大小和超時。Windows用I/O緩沖區(qū)來暫存串口輸入和輸出的數(shù)據(jù)。如果通信的速率較高,則應(yīng)該設(shè)置較大的緩沖區(qū)。調(diào)用m函數(shù)可以設(shè)置串行口的輸入和輸出緩沖區(qū)的大小。函數(shù)原型 BOOLm(

HANDLEhFile, //通信設(shè)備的句柄 DWORDdwInQueue, //輸入緩沖區(qū)的大?。ㄗ止?jié)數(shù)) DWORDdwOutQueue //輸出緩沖區(qū)的大小(字節(jié)數(shù)) );

配置串口——超時控制在用ReadFile和WriteFile讀寫串行口時,需要考慮超時問題。超時的作用是在指定的時間內(nèi)沒有讀入或發(fā)送指定數(shù)量的字符,ReadFile或WriteFile的操作仍然會結(jié)束。要查詢當(dāng)前的超時設(shè)置應(yīng)調(diào)用mTimeouts函數(shù),該函數(shù)會填充一個COMMTIMEOUTS結(jié)構(gòu)。調(diào)用mTimeouts可以用某一個COMMTIMEOUTS結(jié)構(gòu)的內(nèi)容來設(shè)置超時。讀寫串口的超時有兩種:間隔超時和總超時。間隔超時是指在接收時兩個字符之間的最大時延??偝瑫r是指讀寫操作總共花費(fèi)的最大時間。寫操作只支持總超時,而讀操作兩種超時均支持。用COMMTIMEOUTS結(jié)構(gòu)可以規(guī)定讀寫操作的超時。串口配置——超時控制通過調(diào)用mTimeOuts函數(shù)獲得當(dāng)前的設(shè)置。用mTimeOuts函數(shù)來完成設(shè)置。結(jié)構(gòu)原型typedefstructMTIMEOUTS{ DWORDReadIntervalTimeout;//讀間隔超時DWORDReadTotalTimeoutMultiplier;//讀時間系數(shù)DWORDReadTotalTimeoutConstant;//讀時間常量DWORDWriteTotalTimeoutMultiplier;//寫時間系數(shù)DWORDWriteTotalTimeoutConstant;//寫時間常量 }COMMTIMEOUTS,*MTIMEOUTS;發(fā)送超時控制ReadIntervalTimeout是指兩個字符傳送之間的超時時間。一次讀操作的超時時間等于要接收的字符數(shù)乘以ReadTotalTimeoutMultiplier,再加上ReadTotalTimeoutConstant。

WriteIntervalTimeout是指兩個字符傳送之間的超時時間。一次寫操作的超時時間等于要發(fā)送的字符數(shù)乘以WriteTotalTimeoutMultiplier,再加上WriteTotalTimeoutConstant超時控制——示例COMMTIMEOUTSCommTimeouts;mTimeouts(m_hSerial,mTimeouts); //獲得當(dāng)前超時參數(shù)CommTimeouts.ReadIntervalTimeout=MAXDWORD;CommTimeouts.ReadTotalTimeoutMultiplier=10;CommTimeouts.ReadTotalTimeoutConstant=10;CommTimeouts.WriteTotalTimeoutMultiplier=50;CommTimeouts.WriteTotalTimeoutConstant=100;mTimeouts(hSerial,mTimeouts); //設(shè)置當(dāng)前超時參數(shù)數(shù)據(jù)傳輸讀寫串行端口與讀寫文件采用的函數(shù)相同,即ReadFile、WriteFile。發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù)用以下命令完成WriteFile(hSerial,&Byte,nByte,&dwNumBytes,NULL);

其中hSerial 句柄&Byte 數(shù)據(jù)緩沖區(qū)地址nByte 數(shù)據(jù)大小&dwNumBytes 返回發(fā)送出去的字節(jié)數(shù)NULL 不支持重疊接收數(shù)據(jù)串口編程最復(fù)雜的部份就是接收數(shù)據(jù)。串口接收數(shù)據(jù)常常通過創(chuàng)建一個線程來完成。接收線程既要考慮及時的讀取數(shù)據(jù),還要解決接收到的數(shù)據(jù)的處理工作??梢杂肅reateThread來啟動一個接收數(shù)據(jù)的線程關(guān)閉串口程序的終止可以自動關(guān)閉串口,也可用函數(shù)CloseHandle(),以便釋放所占資源。內(nèi)容1、通訊方式及有關(guān)概念2、RS-232串口通訊簡介3、RS-232串口通訊編程4、TCP/IP協(xié)議簡介5、TCP/IP網(wǎng)絡(luò)通訊編程兩臺計(jì)算機(jī)通過網(wǎng)絡(luò)進(jìn)行通信AB網(wǎng)絡(luò)180協(xié)議協(xié)議端口號端口號

網(wǎng)絡(luò)的狀況多種通信媒介——有線、無線……不同種類的設(shè)備——通用、專用……不同的操作系統(tǒng)——Unix、Windows……不同的應(yīng)用環(huán)境——固定、移動……不同業(yè)務(wù)種類——分時、交互、實(shí)時……寶貴的投資和積累——有形、無形……用戶業(yè)務(wù)的延續(xù)性——不允許出現(xiàn)大的跌宕起伏。它們互相交織,形成了非常復(fù)雜的系統(tǒng)應(yīng)用環(huán)境。

IP地址IPV4和IPV6IP網(wǎng)絡(luò)中每臺主機(jī)都必須有一個惟一的IP地址;IP地址是一個邏輯地址;因特網(wǎng)上的IP地址具有全球唯一性;32位,4個字節(jié),常用點(diǎn)分十進(jìn)制的格式表示,例如:6

網(wǎng)絡(luò)協(xié)議為進(jìn)行網(wǎng)絡(luò)中的數(shù)據(jù)交換(通信)而建立的規(guī)則、標(biāo)準(zhǔn)或約定。(=語義+語法+規(guī)則)不同層具有各自不同的協(xié)議。

網(wǎng)絡(luò)異質(zhì)性問題的解決網(wǎng)絡(luò)體系結(jié)構(gòu)就是使這些用不同媒介連接起來的不同設(shè)備和網(wǎng)絡(luò)系統(tǒng)在不同的應(yīng)用環(huán)境下實(shí)現(xiàn)互操作性,并滿足各種業(yè)務(wù)需求的一種粘合劑,它營造了一種“生存空間”——任何廠商的任何產(chǎn)品、以及任何技術(shù)只要遵守這個空間的行為規(guī)則,就能夠在其中生存并發(fā)展。網(wǎng)絡(luò)體系結(jié)構(gòu)解決異質(zhì)性問題采用的是分層方法——把復(fù)雜的網(wǎng)絡(luò)互聯(lián)問題劃分為若干個較小的、單一的問題,在不同層上予以解決。

就像我們在編程時把問題分解為很多小的模塊來解決一樣。

ISO/OSI七層參考模型OSI(OpenSystemInterconnection)參考模型將網(wǎng)絡(luò)的不同功能劃分為7層。應(yīng)用層表示層物理層會話層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層處理網(wǎng)絡(luò)應(yīng)用數(shù)據(jù)表示主機(jī)間通信端到端的連接尋址和最短路徑介質(zhì)訪問(接入)二進(jìn)制傳輸

ISO/OSI七層參考模型通信實(shí)體的對等層之間不允許直接通信。各層之間是嚴(yán)格單向依賴。上層使用下層提供的服務(wù)—Serviceuser下層向上層提供服務(wù)—Serviceprovider

對等通信示例“你好”“Hello”傳真中國教師翻譯秘書“Hallo”“Hello”傳真德國教師翻譯秘書對交談內(nèi)容的共識用英語對話使用傳真通信P3P2P1物理通信線路

對等層通信的實(shí)質(zhì)對等層實(shí)體之間虛擬通信。下層向上層提供服務(wù),實(shí)際通信在最底層完成。

OSI各層所使用的協(xié)議應(yīng)用層:遠(yuǎn)程登錄協(xié)議Telnet、文件傳輸協(xié)議FTP、超文本傳輸協(xié)議HTTP、域名服務(wù)DNS、簡單郵件傳輸協(xié)議SMTP、郵局協(xié)議POP3等。傳輸層:傳輸控制協(xié)議TCP、用戶數(shù)據(jù)報(bào)協(xié)議UDP。

TCP:面向連接的可靠的傳輸協(xié)議。

UDP:是無連接的,不可靠的傳輸協(xié)議。網(wǎng)絡(luò)層:網(wǎng)際協(xié)議IP、Internet互聯(lián)網(wǎng)控制報(bào)文協(xié)議ICMP、Internet組管理協(xié)議IGMP。

數(shù)據(jù)封裝一臺計(jì)算機(jī)要發(fā)送數(shù)據(jù)到另一臺計(jì)算機(jī),數(shù)據(jù)首先必須打包,打包的過程稱為封裝。封裝就是在數(shù)據(jù)前面加上特定的協(xié)議頭部。數(shù)據(jù)數(shù)據(jù)協(xié)議頭

數(shù)據(jù)封裝OSI參考模型中,對等層協(xié)議之間交換的信息單元統(tǒng)稱為協(xié)議數(shù)據(jù)單元(PDU,ProtocolDataUnit)。OSI參考模型中每一層都要依靠下一層提供的服務(wù)。為了提供服務(wù),下層把上層的PDU作為本層的數(shù)據(jù)封裝,然后加入本層的頭部(和尾部)。頭部中含有完成數(shù)據(jù)傳輸所需的控制信息。這樣,數(shù)據(jù)自上而下遞交的過程實(shí)際上就是不斷封裝的過程。到達(dá)目的地后自下而上遞交的過程就是不斷拆封的過程。由此可知,在物理線路上傳輸?shù)臄?shù)據(jù),其外面實(shí)際上被包封了多層“信封”。但是,某一層只能識別由對等層封裝的“信封”,而對于被封裝在“信封”內(nèi)部的數(shù)據(jù)僅僅是拆封后將其提交給上層,本層不作任何處理。

TCP/IP模型TCP/IP起源于美國國防部高級研究規(guī)劃署(DARPA)的一項(xiàng)研究計(jì)劃——實(shí)現(xiàn)若干臺主機(jī)的相互通信?,F(xiàn)在TCP/IP已成為Internet上通信的工業(yè)標(biāo)準(zhǔn)。TCP/IP模型包括4個層次:應(yīng)用層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)接口

TCP/IP與OSI參考模型的對應(yīng)關(guān)系應(yīng)用層表示層會話層傳輸層物理層數(shù)據(jù)鏈路層網(wǎng)絡(luò)層7654321OSI參考模型應(yīng)用層傳輸層網(wǎng)絡(luò)接口網(wǎng)絡(luò)層TCP/IP模型

端口按照OSI七層模型的描述,傳輸層提供進(jìn)程(應(yīng)用程序)通信的能力。為了標(biāo)識通信實(shí)體中進(jìn)行通信的進(jìn)程(應(yīng)用程序),TCP/IP協(xié)議提出了協(xié)議端口(protocolport,簡稱端口)的概念。端口是一種抽象的軟件結(jié)構(gòu)(包括一些數(shù)據(jù)結(jié)構(gòu)和I/O緩沖區(qū))。應(yīng)用程序通過系統(tǒng)調(diào)用與某端口建立連接(binding)后,傳輸層傳給該端口的數(shù)據(jù)都被相應(yīng)的進(jìn)程所接收,相應(yīng)進(jìn)程發(fā)給傳輸層的數(shù)據(jù)都通過該端口輸出。端口用一個整數(shù)型標(biāo)識符來表示,即端口號。端口號跟協(xié)議相關(guān),TCP/IP傳輸層的兩個協(xié)議TCP和UDP是完全獨(dú)立的兩個軟件模塊,因此各自的端口號也相互獨(dú)立。端口使用一個16位的數(shù)字來表示,它的范圍是0~65535,1024以下的端口號保留給預(yù)定義的服務(wù)。例如:http使用80端口。

套接字(socket)的引入為了能夠方便的開發(fā)網(wǎng)絡(luò)應(yīng)用軟件,由美國伯克利大學(xué)在Unix上推出了一種應(yīng)用程序訪問通信協(xié)議的操作系統(tǒng)調(diào)用socket(套接字)。socket的出現(xiàn),使程序員可以很方便地訪問TCP/IP,從而開發(fā)各種網(wǎng)絡(luò)應(yīng)用的程序。隨著Unix的應(yīng)用推廣,套接字在編寫網(wǎng)絡(luò)軟件中得到了極大的普及。后來,套接字又被引進(jìn)了Windows等操作系統(tǒng),成為開發(fā)網(wǎng)絡(luò)應(yīng)用程序的非常有效快捷的工具。套接字存在于通信區(qū)域中。通信區(qū)域也叫地址族,它是一個抽象的概念,主要用于將通過套接字通信的進(jìn)程的共有特性綜合在一起。套接字通常只與同一區(qū)域的套接字交換數(shù)據(jù)(也有可能跨區(qū)域通信,但這只在執(zhí)行了某種轉(zhuǎn)換進(jìn)程后才能實(shí)現(xiàn))。WindowsSockets只支持一個通信區(qū)域:網(wǎng)際域(AF_INET),這個域被使用網(wǎng)際協(xié)議簇通信的進(jìn)程使用。

網(wǎng)絡(luò)字節(jié)順序不同的計(jì)算機(jī)存放多字節(jié)值的順序不同,有的機(jī)器在起始地址存放低位字節(jié)(低位先存),有的機(jī)器在起始地址存放高位字節(jié)(高位先存)?;贗ntel的CPU,即我們常用的PC機(jī)采用的是低位先存。為保證數(shù)據(jù)的正確性,在網(wǎng)絡(luò)協(xié)議中需要指定網(wǎng)絡(luò)字節(jié)順序。TCP/IP協(xié)議使用16位整數(shù)和32位整數(shù)的高位先存格式。

客戶機(jī)/服務(wù)器模式在TCP/IP網(wǎng)絡(luò)應(yīng)用中,通信的兩個進(jìn)程間相互作用的主要模式是客戶機(jī)/服務(wù)器模式(client/server),即客戶向服務(wù)器提出請求,服務(wù)器接收到請求后,提供相應(yīng)的服務(wù)。客戶機(jī)/服務(wù)器模式的建立基于以下兩點(diǎn):首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提供服務(wù),資源較少的客戶請求服務(wù)這一非對等作用。其次,網(wǎng)間進(jìn)程通信完全是異步的,相互通信的進(jìn)程間既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機(jī)制為希望通信的進(jìn)程間建立聯(lián)系,為二者的數(shù)據(jù)交換提供同步,這就是基于客戶機(jī)/服務(wù)器模式的TCP/IP。

客戶機(jī)/服務(wù)器模式客戶機(jī)/服務(wù)器模式在操作過程中采取的是主動請求的方式。

首先服務(wù)器方要先啟動,并根據(jù)請求提供相應(yīng)的服務(wù):①打開一個通信通道并告知本地主機(jī),它愿意在某一地址和端口上接收客戶請求。②等待客戶請求到達(dá)該端口。③接收到重復(fù)服務(wù)請求,處理該請求并發(fā)送應(yīng)答信號。接收到并發(fā)服務(wù)請求,要激活一個新的進(jìn)程(或線程)來處理這個客戶請求。新進(jìn)程(或線程)處理此客戶請求,并不需要對其它請求作出應(yīng)答。服務(wù)完成后,關(guān)閉此新進(jìn)程與客戶的通信鏈路,并終止。④返回第二步,等待另一客戶請求。⑤關(guān)閉服務(wù)器。

客戶方:①打開一個通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。②向服務(wù)器發(fā)服務(wù)請求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請求。③請求結(jié)束后關(guān)閉通信通道并終止。

WindowsSockets的實(shí)現(xiàn)WindowsSockets是MicrosoftWindows的網(wǎng)絡(luò)程序設(shè)計(jì)接口,它是從BerkeleySockets擴(kuò)展而來的,以動態(tài)鏈接庫的形式提供給我們使用。WindowsSockets在繼承了BerkeleySockets主要特征的基礎(chǔ)上,又對它進(jìn)行了重要擴(kuò)充。這些擴(kuò)充主要是提供了一些異步函數(shù),并增加了符合Windows消息驅(qū)動特性的網(wǎng)絡(luò)事件異步選擇機(jī)制。WindowsSockets1.1和BerkeleySockets都是基于TCP/IP協(xié)議的;WindowsSockets2從WindowsSockets1.1發(fā)展而來,與協(xié)議無關(guān)并向下兼容,可以使用任何底層傳輸協(xié)議提供的通信能力,來為上層應(yīng)用程序完成網(wǎng)絡(luò)數(shù)據(jù)通訊,而不關(guān)心底層網(wǎng)絡(luò)鏈路的通訊情況,真正實(shí)現(xiàn)了底層網(wǎng)絡(luò)通訊對應(yīng)用程序的透明。

套接字的類型流式套接字(SOCK_STREAM) 提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無差錯、無重復(fù)的發(fā)送,且按發(fā)送順序接收。數(shù)據(jù)報(bào)式套接字(SOCK_DGRAM)

提供無連接服務(wù)。數(shù)據(jù)包以獨(dú)立包形式發(fā)送,不提供無錯保證,數(shù)據(jù)可能丟失或重復(fù),并且接收順序混亂。原始套接字(SOCK_RAW)。

基于TCP(面向連接)的socket編程服務(wù)器端程序:1、創(chuàng)建套接字(socket)。 2、將套接字綁定到一個本地地址和端口上(bind)。3、將套接字設(shè)為監(jiān)聽模式,準(zhǔn)備接收客戶請求(listen)。4、等待客戶請求到來;當(dāng)請求到來后,接受連接請求,返回一個新的對應(yīng)于此次連接的套接字(accept)。5、用返回的套接字和客戶端進(jìn)行通信(send/recv)。6、返回,等待另一客戶請求。7、關(guān)閉套接字。客戶端程序:1、創(chuàng)建套接字(socket)。 2、向服務(wù)器發(fā)出連接請求(connect)。3、和服務(wù)器端進(jìn)行通信(send/recv)。4、關(guān)閉套接字。

基于UDP(面向無連接)的socket編程服務(wù)器端(接收端)程序:1、創(chuàng)建套接字(socket)。 2、將套接字綁定到一個本地地址和端口上(bind)。3、等待接收數(shù)據(jù)(recvfrom)。4、關(guān)閉套接字??蛻舳耍òl(fā)送端)程序:1、創(chuàng)建套接字(socket)。 2、向服務(wù)器發(fā)送數(shù)據(jù)(sendto)。3、關(guān)閉套接字。

相關(guān)函數(shù)說明intWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);wVersionRequested參數(shù)用于指定準(zhǔn)備加載的Winsock庫的版本。高位字節(jié)指定所需要的Winsock庫的副版本,而低位字節(jié)則是主版本??捎肕AKEWORD(x,y)(其中,x是高位字節(jié),y是低位字節(jié))方便地獲得wVersionRequested的正確值。lpWSAData參數(shù)是指向WSADATA結(jié)構(gòu)的指針,WSAStartup用其加載的庫版本有關(guān)的信息填在這個結(jié)構(gòu)中。

續(xù):WSADATA結(jié)構(gòu)定義如下:typedefstructWSAData{WORDwVersion;WORDwHighVersion;charszDescription[WSADESCRIPTION_LEN+1];charszSystemStatus[WSASYS_STATUS_LEN+1];unsignedshortiMaxSockets;unsignedshortiMaxUdpDg;charFAR*lpVendorInfo;}WSADATA,*LPWSADATA;

WSAStartup把第一個字段wVersion設(shè)成打算使用的Winsock版本。wHighVersion參數(shù)容納的是現(xiàn)有的Winsock庫的最高版本。記住,這兩個字段中,高位字節(jié)代表的是Winsock副版本,而低位字節(jié)代表的則是Winsock主版本。szDescription和szSystemStatus這兩個字段由特定的Winsock實(shí)施方案設(shè)定,事實(shí)上沒有用。不要使用下面這兩個字段:iMaxSockets和iMaxUdpDg,它們是假定同時最多可打開多少套接字和數(shù)據(jù)報(bào)的最大長度。然而,要知道數(shù)據(jù)報(bào)的最大長度應(yīng)該通過WSAEnumProtocols來查詢協(xié)議信息。同時最多可打開套接字的數(shù)目不是固定的,很大程度上和可用物理內(nèi)存的多少有關(guān)。最后,lpVendorInfo字段是為Winsock實(shí)施方案有關(guān)的指定廠商信息預(yù)留的。任何一個Win32平臺上都沒有使用這個字段。如果WinSock.dll或底層網(wǎng)絡(luò)子系統(tǒng)沒有被正確初始化或沒有被找到,WSAStartup將返回WSASYSNOTREADY。此外這個函數(shù)允許你的應(yīng)用程序協(xié)商使用某種版本的WinSock規(guī)范,如果請求的版本等于或高于DLL所支持的最低版本,WSAData的wVersion成員中將包含你的應(yīng)用程序應(yīng)該使用的版本,它是DLL所支持的最高版本與請求版本中較小的那個。反之,如果請求的版本低于DLL所支持的最低版本,WSAStartup將返回WSAVERNOTSUPPORTED。關(guān)于WSAStartup更詳細(xì)的信息,請查閱MSDN中的相關(guān)部分。對于每一個WSAStartup的成功調(diào)用(成功加載WinSockDLL后),在最后都對應(yīng)一個WSACleanUp調(diào)用,以便釋放為該應(yīng)用程序分配的資源。

相關(guān)函數(shù)說明SOCKETsocket(intaf,inttype,intprotocol);該函數(shù)接收三個參數(shù)。第一個參數(shù)af指定地址族,對于TCP/IP協(xié)議的套接字,它只能是AF_INET(也可寫成PF_INET)。第二個參數(shù)指定Socket類型,對于1.1版本的Socket,它只支持兩種類型的套接字,SOCK_STREAM指定產(chǎn)生流式套接字,SOCK_DGRAM產(chǎn)生數(shù)據(jù)報(bào)套接字。第三個參數(shù)是與特定的地址家族相關(guān)的協(xié)議,如果指定為0,那么它就會根據(jù)地址格式和套接字類別,自動為你選擇一個合適的協(xié)議。這是推薦使用的一種選擇協(xié)議的方法。如果這個函數(shù)調(diào)用成功,它將返回一個新的SOCKET數(shù)據(jù)類型的套接字描述符。如果調(diào)用失敗,這個函數(shù)就會返回一個INVALID_SOCKET,錯誤信息可以通過WSAGetLastError函數(shù)返回。

相關(guān)函數(shù)說明intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);這個函數(shù)接收三個參數(shù)。第一個參數(shù)s指定要綁定的套接字,第二個參數(shù)指定了該套接字的本地地址信息,是指向sockaddr結(jié)構(gòu)的指針變量,由于該地址結(jié)構(gòu)是為所有的地址家族準(zhǔn)備的,這個結(jié)構(gòu)可能(通常會)隨所使用的網(wǎng)絡(luò)協(xié)議不同而不同,所以,要用第三個參數(shù)指定該地址結(jié)構(gòu)的長度。sockaddr結(jié)構(gòu)定義如下:

structsockaddr{u_shortsa_family;charsa_data[14];};sockaddr的第一個字段sa_family指定該地址家族,在這里必須設(shè)為AF_INET。sa_data僅僅是表示要求一塊內(nèi)存分配區(qū),起到占位的作用,該區(qū)域中指定與協(xié)議相關(guān)的具體地址信息。由于實(shí)際要求的只是內(nèi)存區(qū),所以對于不同的協(xié)議家族,用不同的結(jié)構(gòu)來替換sockaddr。除了sa_family外,sockaddr是按網(wǎng)絡(luò)字節(jié)順序表示的。在TCP/IP中,我們可以用sockaddr_in結(jié)構(gòu)替換sockaddr,以方便我們填寫地址信息。

續(xù):sockaddr_in的定義如下:

structsockaddr_in{shortsin_family;unsignedshortsin_port;struct

in_addrsin_addr;charsin_zero[8];};

其中,sin_family表示地址族,對于IP地址,sin_family成員將一直是AF_INET。成員sin_port指定的是將要分配給套接字的端口。成員sin_addr給出的是套接字的主機(jī)IP地址。而成員sin_zero只是一個填充數(shù),以使sockaddr_in結(jié)構(gòu)和sockaddr結(jié)構(gòu)的長度一樣。如果這個函數(shù)調(diào)用成功,它將返回0。如果調(diào)用失敗,這個函數(shù)就會返回一個SOCKET_ERROR,錯誤信息可以通過WSAGetLastError函數(shù)返回。將IP地址指定為INADDR_ANY,允許套接字向任何分配給本地機(jī)器的IP地址發(fā)送或接收數(shù)據(jù)。多數(shù)情況下,每個機(jī)器只有一個IP地址,但有的機(jī)器可能會有多個網(wǎng)卡,每個網(wǎng)卡都可以有自己的IP地址,用INADDR_ANY可以簡化應(yīng)用程序的編寫。將地址指定為INADDR_ANY,允許一個獨(dú)立應(yīng)用接受發(fā)自多個接口的回應(yīng)。如果我們只想讓套接字使用多個IP中的一個地址,就必須指定實(shí)際地址,要做到這一點(diǎn),可以用inet_addr()函數(shù),這個函數(shù)需要一個字符串作為其參數(shù),該字符串指定了以點(diǎn)分十進(jìn)制格式表示的IP地址(如6)。而且inet_addr()函數(shù)會返回一個適合分配給S_addr的u_long類型的數(shù)值。inet_ntoa()函數(shù)會完成相反的轉(zhuǎn)換,它接受一個in_addr結(jié)構(gòu)體類型的參數(shù)并返回一個以點(diǎn)分十進(jìn)制格式表示的IP地址字符串。

思考

串口編程和Socket編程本質(zhì)上是相同的,是可以統(tǒng)一起來的CommBaseCommSerialsCommSocketClientCommSocketServerCommBase的結(jié)構(gòu)方法:TestPort;//檢測通信口是否存在CheckOnLine;//檢測通信口是否已開啟mPort;//配置通信口Start;//開始Stop;//結(jié)束Close;//關(guān)閉寫操作;//Write讀操作;//Read(線程方式)CommBase的讀操作

采用線程方式

采用事件響應(yīng)方式向外傳遞數(shù)據(jù)

注意線程中變量的鎖定問題二進(jìn)制協(xié)議編解碼技巧二進(jìn)制協(xié)議

二進(jìn)制協(xié)議多用于實(shí)時通信場合

二進(jìn)制協(xié)議實(shí)質(zhì)是一串來自端口的16進(jìn)制數(shù)字流,數(shù)據(jù)流可以分為若干數(shù)據(jù)幀

數(shù)據(jù)幀結(jié)構(gòu)基本可分為:引導(dǎo)區(qū):包含同步位,幀長度等信息數(shù)據(jù)區(qū):包括有效數(shù)據(jù)校驗(yàn)區(qū):引導(dǎo)區(qū)和數(shù)據(jù)區(qū)的校驗(yàn)和

二進(jìn)制協(xié)議的解碼關(guān)鍵是建立幀同步。同步位可能在數(shù)據(jù)區(qū)中反復(fù)出現(xiàn),不能僅靠判斷同步位就建立幀同步,必須依靠校驗(yàn)來建立幀同步RTCMSC-104協(xié)議國際海運(yùn)事業(yè)無線電技術(shù)委員會(RadioTechnicalCommissionforMaritimeServices)于1983.11成立的SC-104專業(yè)委員會推出的用于航海衛(wèi)星導(dǎo)航差分的協(xié)議

國際航空無線電技術(shù)委員會(RadioTechnicalCommissionforAeronauticservice)129專業(yè)委員會制定了RTCASC-159協(xié)議各類差分格式的發(fā)展歷史RTCMRTCACMR198519901995200020052010SC-104成立1983.1110403.12006.10.2710403.1-Am32009.6Scat-11993.4V1.01985.11V2.01990.1.1V2.11994.1.3V2.21998.1.15V2.32001.8.20NTRIPV1.02004.8.20NTRIPV2.02009.6SC-159成立10403.1-Am22007.8.3110403.1-Am12007.5.21RTCMSC-104的發(fā)展版本發(fā)行日期主要內(nèi)容NtripV2.02009.6在NtripV1.0上的完善NtripV1.02004.8.20提供在網(wǎng)絡(luò)上對RTCM協(xié)議的支持V3.02006-2009新協(xié)議,與2.x不再兼容,對網(wǎng)絡(luò)RTK提供支持V2.32001.8.20在V2.2基礎(chǔ)上增加了23和24語句(天線參考類型)V2.21998.1.15在V2.1基礎(chǔ)上增加了對GLONASS差分的支持V2.11994.1.3在V2.0基礎(chǔ)上增加了載波相位差分V2.01990.1.1僅支持偽距差分V1.01995.1草稿,針對GPS差分使用國內(nèi)常用的RTCM協(xié)議版本V2.3格式差分電文由若干幀電文組成,每幀電文由若干個電文字組成每個電文字長度均為30bit,電文字最后的6bit是校驗(yàn)區(qū),校驗(yàn)算法與GPS衛(wèi)星導(dǎo)航電文的校驗(yàn)算法相同。每幀電文包括2個字的標(biāo)準(zhǔn)電文頭,N個字的數(shù)據(jù)(N范圍從0到31),總長度為N+2個電文字。每幀電文中最多可包含N=31個30bit字的數(shù)據(jù),全長共33個電文字。不同類型的電文N值不同,同類電文的N值也有可能不同。電文類型6或34等沒有數(shù)據(jù)的補(bǔ)空電文僅由2個30bit字的電文頭組成,其N=0。電文數(shù)據(jù)電文字頭V2.3電文通用格式

每幀電文由若干個30bit的字組成,由兩個標(biāo)準(zhǔn)電文字頭開始。每幀含有N+2個字,后N個字為電文數(shù)據(jù)。30bit……字1字2字3字N1+2……第1幀字1字2字3字N2+2……第2幀字1字2字3字Nm+2……第m幀V2.3的電文頭V2.3的電文數(shù)據(jù)區(qū)四種語句最終定義的,且在今后不會改變的電文稱為固定類電文(fixed)。有試驗(yàn)性質(zhì),格式暫不固定的電文稱為暫定類電文(tentative)。預(yù)留的,用于特定用途的電文稱為保留類電文(reserve)。未定義用途和內(nèi)容及格式的電文稱為未定義類(undefined)V2.3語句偽距離差分(CDGPS)電文主要電文類型:電文類型1、2:偽距改正值及其變化率;電文類型9:局部衛(wèi)星改正數(shù)集合;電文類型3:基準(zhǔn)站坐標(biāo);電文類型5:衛(wèi)星健康狀態(tài);電文類型16:文本等特殊信息。播發(fā)內(nèi)容(括號內(nèi)電文為可選項(xiàng)):1、2、(3、16、5)9、(3、16、5)電文類型1電文類型2偽距改正數(shù)的計(jì)算—基準(zhǔn)站參考時刻t0的偽距改正數(shù)(PRC)(以下記為PRC(t0))是計(jì)算的幾何距離與改正后的偽距觀測值差值t0為電文頭中的改進(jìn)Z計(jì)數(shù)。改正后的偽距觀測值是原始偽距觀測值消除以下影響后得到的:——以米為單位的接收機(jī)鐘差;——tGD,即衛(wèi)星L1和L2信號的群延遲差;——以米為單位的衛(wèi)星鐘差;——以米為單位的衛(wèi)星相對論影響改正。偽距改正數(shù)的計(jì)算—基準(zhǔn)站衛(wèi)星導(dǎo)航電文發(fā)生變化時,參考站應(yīng)首先使用新舊兩套導(dǎo)航電文計(jì)算出兩組偽距改正數(shù)和距離變化率改正數(shù):PRC(oldIOD)和RRC(oldIOD),以及PRC(newIOD)和RRC(newIOD)。然后下式進(jìn)行求差計(jì)算,得到DELTA偽距改正數(shù)(DELTAPRC)和DELTA距離變化率改正數(shù)(DELTARRC)。DELTAPRC=PRC(oldIOD)-PRC(newIOD)…(3)式(3)中:DELTAPRC——電文類型2中的DELTA偽距改正數(shù);PRC(oldIOD)——舊IOD時刻的偽距改正數(shù);PRC(newIOD)——新IOD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論