前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇文件傳輸范文,相信會為您的寫作帶來幫助,發現更多的寫作思路和靈感。
1、首先,點擊手機里面的微信APP進入。
2、進入到微信主頁面之后,點擊右上角的搜索按鈕。
3、然后,在搜索框輸入文件傳輸助手,然后點擊下面的文件傳輸助手。就找到了文件傳輸助手。
4、通過文件傳輸助手,可以發送文件、圖片等到微信上,這些消息也可以同步到電腦微信上。
(來源:文章屋網 )
關鍵詞:文件傳輸服務器;系統設計;模型設計;模塊化
1 引言
現在網絡中所傳輸的數據無非就是小的數據包或是大的媒體或文件流數據。通過研究一個具有實際功能的文件傳輸服務器,對于理解服務器通信軟件的設計具有一定意義。因為文件傳輸服務器既可以傳輸小的信息數據,也可以傳輸大的文件數據流。本文主要探討了文件傳輸服務器的設計關鍵技術。
2 系統設計要求和設計思路
1、首先在手機桌面上點擊打開微信”。
2、進入微信的主頁面,點擊搜索欄,然后輸入文件”就會自動跳出搜索項,點擊下方的文件傳輸助手”。
3、接著點擊文件傳輸助手”,就會自動跳轉到文件傳輸助手”的聊天頁面了。
4、最后在文件傳輸助手”聊天頁面里即可查詢自己以往的傳輸記錄。
(來源:文章屋網 )
一、引言
隨著計算機應用的不斷深入和信息交流的不斷增加,許多UNIX系統用戶越來越感到,僅由一臺高性能微機運行UNIX,帶多臺至幾十臺終端已不能滿足應用的需要,因此,越來越多的系統正在向多用戶網絡方向發展。
UNIX TCP/IP網絡就是解決上述矛盾的一種系統。它將多臺運行UNIX系統的超級微機用電纜線連接起來,采用TCP/IP協議進行通信,任一微機所連接的終端可登錄到網上其它任一主機上進行操作,也可以通過網絡提供的功能,進行其它網絡操作。
SCO UNIX TCP/IP網絡系統為用戶提供了許多通信功能,它包括遠程登錄、文件傳輸、郵件發送以及其它有關網絡應用、管理及控制方面的命令。這些功能均在命令級實現,即用戶只需在命令提示符下鍵入相應的命令,即可完成相應的操作。但是,有許多應用系統對網絡功能的調用是在應用程序運行過程中的,僅通過命令接口是不能完全滿足應用的需要的,因此,用戶必須通過網絡提供的接口編制自己的網絡應用程序。SCO UNIX TCP/IP為用戶提供了一組套接字接口,本文將介紹如何通過調用套接字以及TCP/IP提供的庫函數編制一個文
件傳輸應用程序。
二、套接字接口及調用
1.套接字接口
一個用戶應用系統,即一個客戶進程,通常需要與一個完成其功能有的服務進程進行通信。在UNIX系統中完成這種進程間通信的一個方法是通過管道(PIPES)來實現的,UNIX網絡運行系統也提供一個更靈活的強有力的獨立子系統以支持一個分布式環境的進程間通信,這個子系統就稱作套接字(SOCKET)接口。套接字接口構成了在單個主機內及整個網際間的編程界面和進程間通信的基礎。
一個套接字是一個軟件實體,它為進程間通信提供了基本的構件,它是進程間通信的端點,對互連網地址來說,下面的一對全名套接字唯一確定了通信雙方的連接:
其中,node是4字節地址,port為2字節長,左邊的是本地套接字,右邊是遠程或外部套接字。
套接字具有類型,其類型是由面向程序員的通信特性決定的,它與套接字支持的特殊協議有關。時程通常是在相同類型的套接字之間通信。目前程序員可使用下面三種類型的套接字。
·流套接字:提供雙向的、可靠的、有序的且不重復的無記錄邊界的數據流,它是最常用的一種類型。
·數據報套接字:它支持雙向數據流,但記錄邊界被保持,接收進程必須重新定序,消除重復并提供可靠保證,它適用于單個報文的可靠性不重要的場合。
·原始套接字:使用原始套接字,程序員能訪問低層通信協議(如IP),它不是為一般用戶設置的,而是為了開發新的通信協議,或是為了訪問現有協議中較隱蔽功能而設置的。
2.套接字的調用
TCP/IP的系統調用主要是通過對套接字的操作來實現的,下面給出了部分常用的TCP/IP系統調用:
·scoket 創建套接字
·bind 為套接字賦一個名字
·connect 啟動一個連接
·accept 接受連接
·listen 監聽連接
·write/send 發送信息
·read/recv 接收信息
·close 關閉套接字
三、UNIX網絡庫例程的應用
網絡庫例程的主要用途是確定和建立網絡地址。
在客戶方與服務方進行通信前,在遠程節點上確定一個服務需要進行多級映射。為便于使用,每個服務被指定一個名字,這個名字必須被翻譯成網絡地址,最后,該地址被用來確定一個物理位置和到服務的路徑。可見,確定遠程節點上的一個服務需要三級映射,這三級映射的具體實現隨著網絡結構不同而有所變化。
UNIX網絡庫例程是C程序語言函數調用,它提供下列映射的標準例程:
·主機名字到網絡地址
·網絡地址到網絡號
·協議名字到協議號
·服務名字到端口號及服務器使用的適當協議
1.映射主機名字
例程gethostbynamne,gethostbyaddr,gethostent均可完成主機名字與地址映射,它們分別將主機名或節點地址映射成一個hostent結構:
struct hostent{
char * h_name;/* 正式主機名 */
char * * h_aliasea;/* 別名表 */
int h_addrtype;/* 主機的地址類型 */
int h_length;/* 地址長度*/
char * * h_addr_list; /* 地址表 */
#define h_addr h_addr_list[0]
}
2.映射網絡名字
getnetbyname, getnetbynumber,getnetent是分別用于映射網絡名字的例程,使用這些例程,可將網絡名映射到網絡號,或把網絡號映射到網絡名,并返回一個netent結構:
struct netent{
char * n_name;/* 正式的網絡名 */
char * * n_aliasea;/* 別名表 */
int n_addrtype;/* 網絡地址類型 */
unsignedlong n_net;/* 網絡號 */
}
3.映射服務名字
通過指定一個服務名和一個可選的合法協議,例程getservbyname,getservbyport,get
servent映射服務名字到一個servent結構:
struct servent{
char * s_name;/* 正式的服務名 */
char * * s_aliasea;/* 別名表 */
int s_port;/* 服務駐留的端口號 */
char * s_proto; /* 所使用的協議 */
}
四、文件傳輸程序的編制
利用網絡所提供的套接字接口和庫例程,采用客戶/服務器模式來編制文件傳輸程序。
程序流程如下:
@@T8S09300.GIF;圖1@@
在通信之前,要為服務分配端口地址,這個地址分配是在/etc/services文件中設置的。
服務方進程啟動后,它創建套接字,指定服務名和合法協議,并在指定端口地址上監聽服務請求。
客戶方進程開始后,也要創建套接字,指定服務名和協議號,并啟動一個與服務方的連接,連接成功后,則立刻開始數據傳送,直到文件傳送結束。
五、結束語
本文只是在多用戶網絡應用方面的一個初控,利用網絡所提供的接口,我們可以在更深層次對其進行研究,開發出功能更強、更為靈活、適用的網絡應用軟件。 參考文獻
關鍵詞: VxWorks; FTP; 分包傳輸; 在線更新
中圖分類號: TN919?34; TP311.1 文獻標識碼: A 文章編號: 1004?373X(2013)24?0050?05
Research and implementation of file transfer method under VxWork
WANG Hao1, JIA Liang1, LI Yong?tian2
(1. Electronic and Information Engineering Institute, Shenyang Aerospace University, Shenyang 110136, China;
2. Beijing Fangtian Changjiu Science and Technology Ltd, beijing 100084, China)
Abstract: In a project development process, in order to meet the needs of online Flash update of DSP application program in data acquisition system, first of all, the application program is downloaded to the system controller memory by means of the Tornado development environment built?in FTP server, then encapsulated into packets to transmit, and finally the application program update is realized. The program solves the problem that when data dump space is less than the size of data transfer file, and the subpackage transmission in several times is required. The entire software development process is performed in the Tornado development environment, which is able to complete the subpackage error?free transmission of application files. The practical application shows that the software program designed according to the scheme can achieve a good Flash online update, has the characteristics of subpackage transmission and data accuracy, and can meet the design requirements.
Keywords: VxWorks; FTP; subpackage transmission; online update
隨著計算機技術、半導體技術以及軟件技術的飛速發展,嵌入式微處理器的性能也得到不斷提高,嵌入式操作系統的種類更是層出不窮,從而使得嵌入式系統在越來越多的領域得到更加廣泛的應用。其中,美國Wind River System公司于1983年設計開發的一種嵌入式實時操作系統(RTOS)VxWorks憑借其可移植性強等優點得到了廣泛的應用[1]。VxWorks提供的系統接口要比其他操作系統豐富,因此選擇它來作為嵌入式采集系統的軟件控制平臺,可以大大提高開發的效率[2]。本文應用Motorola公司的MCP?750PowerPC嵌入式CPCI單板機作為系統控制器及北京方天長久科技有限公司的FTC?6010作為數據采集板組成數據采集系統。在開發過程中,考慮到了數據采集板有可能工作在不方便拆卸的場合,無法使用下載器對數據采集板上的DSP進行應用程序的更新,本文的研究重點就是實現對數據采集板上的DSP應用程序進行在線FLASH更新,從而擺脫下載器的束縛。基于以上考慮,規定了一份適合于本數據采集系統需要的分包文件傳輸協議,并在此基礎上用C語言封裝了一個基于VxWorks下的功能模塊,此功能模塊的設計成功的實現了DSP程序在線FLASH更新,滿足了開發的需要。
1 數據采集系統分析介紹
1.1 系統總體結構及軟硬件開發環境
數據采集系統基于CPCI總線實現,系統總體結構及軟硬件開發環境如圖1所示,上位機Tornado IDE(VxWorks集成開發環境)通過以太網絡和MCP?750PowerPC嵌入式單板機相連,MCP?750作為CPCI總線控制器通過CPCI總線控制數據采集板(FTC?6010),同時通過串口輸出信息到上位機,便于操作。
圖1 系統總體結構及軟硬件開發環境
1.2 DSP應用程序在線FLASH更新時數據流向
圖2簡要給出了DSP應用程序在線FLASH更新時數據的流向,上位機使用FTP通過網絡 將應用程序的二進制文件下載到系統控制器的內存中,再從系統控制器的內存中通過CPCI總線將文件傳送至數據采集板上DSP外接的FLASH中,最后實現FLASH的更新。在傳送過程中,由于系統控制器與數據采集板上的DSP需要通過DPSRAM進行交互,而DPSRAM的存儲空間有限,此時就需要將應用程序文件分包進行傳輸,傳輸協議的制定就顯得至關重要了,需要保證數據傳輸正確,傳輸過程不丟包。
圖2 DSP應用程序在線FLASH更新時數據流向
2 FTP文件傳輸
2.1 FTP介紹
文件傳輸協議(File Transfer Protocol,FTP)是TCP/IP 的一種具體應用,工作在OSI 模型的第7層, TCP 模型的第4層, 即應用層。FTP要求客戶向服務器提供用戶注冊名和口令, 服務器拒絕非法用戶的訪問。但是鏈接一旦建立成功, 一個或多個文本或圖像二進制文件都能被傳送, FTP 不必擔心可靠性和連接的管理, 因為FTP 依靠TCP 正確執行這些功能[3]。Tornado開發環境自帶FTP服務器,常見用于系統成功引導后,下載VxWorks的運行時映象,需正確配置用戶名,密碼和路徑[4]。
2.2 VxWorks下FTP程序的編寫
可以直接使用VxWorks提供的幾個API函數進行FTP程序的編寫,實現從上位機將應用程序文件下載到系統控制器的內存中的目的,這里主要介紹三個:ftpXfer、ftpReplyGet和ftpCommand,幾個函數的原型和主要用法如下[5]:
ftpXfer的作用是初始化通過FTP傳輸的文件。
STATUS ftpXfer
(
char * host,
/*ftp服務器的IP地址,點分十進制,格式類似于"10.0.0.1" */
char * user, /*訪問ftp服務器的用戶名 */
char * passwd, /*訪問ftp服務器的密碼 */
char * acct, /*一般不用,直接填寫為空字符串就可以了*/
char * cmd, /*發送給FTP服務器的命令,例如讀取命令為"RETR"*/
char * dirname, /*待訪問文件所在的目錄*/
char * filename, /*待訪問文件的文件名*/
int * pCtrlSock, /*存儲返回的文件描述符,也就是常說的fd*/
int * pDataSock /*存儲返回的待訪問文件的文件描述符*/
)
此例程按以下順序發起通過FTP服務器傳輸文件:
(1)建立一個連接到指定的主機上的FTP服務器;
(2)在指定的主機上設置好用戶名,密碼和賬號;
(3)發送文件傳輸類型命令;
(4)發送文件所在的目錄以及文件名命令;
(5)將指定的轉移命令和指定的文件名作為參數,建立一個數據連接。典型的傳輸命令為STOR %S:寫入到一個遠程文件;RETR%S:讀取一個遠程文件。
由此產生的控制和數據連接文件描述符分別通過pCtrlSock和pDataSock返回。
調用這個程序后,數據可以被讀取或寫入到遠程服務器返回的文件描述符pDataSock中。當所有傳入的數據被讀取(讀取數據套接字由EOF表示)和/或所有傳出的數據已寫入,應關閉數據套接字fd。
這時候應該調用函數ftpReplyGet(),用來接收控制套接字的最后的回復。
int ftpReplyGet
(
int ctrlSock, /*連接FTP control socket文件描述符fd*/
BOOL expecteof /* TRUE = EOF expected, FALSE = EOF is error */
)
若沒有錯誤,應調用函數ftpCommand()關閉control socket。
int ftpCommand
(
int ctrlSock, /* 連接FTP control socket文件描述符fd */
char * fmt, /* 待傳遞的ftp命令 */
int arg1, /* ftp命令的參數*/
int arg2,
int arg3,
int arg4,
int arg5,
int arg6
)
如果FTP命令不涉及數據傳輸(例如文件刪除或重命名),pDataSock應該是NULL,在這種情況下,不會建立數據連接。函數返回為OK或ERROR(有socket不能創建或不能進行連接)。
FTP文件傳輸的全部過程如圖3所示。
圖3 VxWorks下FTP文件傳輸過程
程序關鍵代碼如下:
/* initiate a transfer via a remote FTP server to read a remote file */
if(ERROR==ftpXfer(UNIX_HOST,USER,PASSWD,"","RETR %s",W_DIR,FILE,&ctrlSock,
&dataSock))
{
perror("Error in initiating a transfer via a remote FTP server");
return ERROR;
}
/* read the remote file data to buffer */
while((NumBytes=read(dataSock,buff,sizeof(buff)))>0)
{
buff+=NumBytes;
}
if(NumBytes
{
perror ("Error in reading"); /* read error */
return (ERROR);
}
close(dataSock);
/* Get an FTP command reply to see whether EOF is encountered */
if(ftpReplyGet(ctrlSock,TRUE)!=FTP_COMPLETE)
{
perror ("positive completion failed");
return (ERROR);
}
/* Send QUIT FTP command */
if(ftpCommand(ctrlSock,"QUIT",0,0,0,0,0,0)!=FTP_COMPLETE)
{
perror ("QUIT FTP command positive completion failed");
return (ERROR);
}
close (ctrlSock);
3 分包文件傳輸協議的制定與實現
3.1 分包文件傳輸協議制定
通過本文前兩節的分析和應用,文件已經成功的從上位機下載到了系統控制器的內存當中,本節著重介紹如何從系統控制器的內存中將文件封裝成數據包分次傳送給DPSRAM,如何通知DSP將數據包取走,如何得到DSP的應答之后傳送下一個數據包,如何判斷數據包全部傳送完成等,簡而言之,就是分包文件傳輸協議的制定,圖4用流程圖的形式對整個過程進行了詳細的描述。
下面以數據包包含的信息要素為例介紹分包文件傳輸協議,每個數據包包含以下信息要素,如圖5所示。
系統控制器將數據包寫入DPSRAM之后,會發起DPSRAM左端口中斷,DSP檢測到中斷后從DPSRAM中取走數據包。
控制命令字的主要作用是告知DSP,此數據包數據空間中的數據是用于FLASH更新用的,需要將其寫入FLASH中。
數據包長度的主要作用是告知DSP即將要讀取的數據包中數據空間的長度,以便DSP將其寫入到FLASH對應的空間中。
圖4 分包文件傳送過程
圖5 數據包的信息要素
數據包序號的主要作用是告知DSP,此次傳輸的是第幾個數據包,防止傳輸過程中丟包。
數據寫入標記分為3種:根據數據包序號,如果傳輸的是第一個數據包,則表示數據包傳輸開始;如果傳輸的是中間的數據包,則表示數據包繼續傳輸;如果接收到的是最后一個數據包,則表示數據包傳輸完成。
CRC校驗和的主要作用是便于DSP比較數據傳輸之前的檢驗和與自己根據接收到的數據計算出來的校驗和是否一致,借此判斷數據傳輸過程中有無丟數現象發生。文件總的大小的主要作用是告知DSP需要擦除多大的FLASH空間用于存儲更新后的文件。
3.2 分包文件傳輸協議實現
協議的實現主要用到了以下幾個關鍵函數:
(1)數據包協議頭的封裝
UINT32 gfWriteLong(UINT32 x,UINT32 y)
{
*(UINT32*)x=y;
return y;
}
此函數用于封裝數據包協議頭,將數據包協議頭信息寫入相應的地址空間中。
(2)CRC校驗和算法[6]
本文采用一種按位計算的方法計算校驗和,和DSP計算出來的校驗和相比較,防止數 據傳輸過程中出現差錯,關鍵代碼如下:
UINT32 gfCRCCheckSum(char *ptr,unsigned long len)
{
unsigned char i;unsigned long crc=0;
while(len??!=0)
{
for(i=0x80;i!=0;i/=2)
{
if((crc&0x8000)!=0)
{
crc*=2;
crc^=0x1021;
}
else
{
crc*=2;
}
if((*ptr&i)!=0)
{
crc^=0x1021;
}
}
ptr++;
}
return crc;
}
(3)應答機制
應答機制的作用是得到DSP接收完一個數據包之后反饋回來的信息(用數值表示),如為數據傳輸正確,則打印出提示提示語句后接著傳送下一個數據包;如為校驗和出錯,則說明數據包傳送過程中發生了丟數等現象,打印出語句后直接結束退出;如為FLASH更新完成,則說明所有數據包傳送完成,且正確的寫入到FLASH中了,打印出提示語句后直接結束退出;如為FLASH更新出錯,則說明所有數據包傳送完成,但沒有正確的寫入到FLASH中,打印出提示語句后直接結束退出。
關鍵代碼如下:
STATUS gfDSPACKCMD(int handle,UINT32 ACKAddress)
{
UINT32 ACKCMD;
ACKCMD=*(*ACKAddress);
switch(ACKCMD)
{
case DSP_ACK_OK:
printf("\nData Packet Send Success and Data Right!\n\n");
break;
case ERROR_CHECKSUM:
printf("\nData packet CRC CheckSum ERROR!\n");
break;
case FLASH_UPDATE_OK:
printf("\n\nFlash Data Updates Over!!!\n");
break;
case ERROR_FLASH_DATA:
printf("\nFlash data write error!\n");
break;
default:
printf("\nAcknowledge command word error!\n");
break;
}
return OK;
}
4 實際應用
基于以上分析研究,編寫了相應的程序,并在數據采集系統中進行了多次試驗,試驗結果如表1所示,從試驗結果可以看出,本文所介紹的方法可以保證數據傳輸的準確性,滿足了DSP程序在線FLASH更新的需求。
表1 FLASH更新測試結果
5 結 論
本文結合實際項目開發過程中遇到的實際問題,概述了一種 VxWorks下簡單文件傳輸的原理和具體的軟件實現方法。實際應用證明,按照此種方式編寫的程序代碼簡單,實用,可以很好的進行文件數據分包傳輸。
參考文獻
[1] 李署東,吳昊,杜祝.VxWorks下點對點簡單文件傳輸的實現[J].中國水運,2011,11(1):84?87.
[2] 唐曉平.VxWorks在cPCI高速數據采集系統中的應用研究[D].長沙:國防科學技術大學,2008.
[3] 黃世權.FTP協議分析和安全研究[J].微計算機信息,2008,24(2?3):93?94.
[4] 馮先成,李寒,張鐵男.基于MPC850 VxWorks系統的BSP設計[J].計算機與數字工程,2012,40(6):39?43.