《IP網絡文件傳輸的實現(xiàn)》由會員分享,可在線閱讀,更多相關《IP網絡文件傳輸的實現(xiàn)(2頁珍藏版)》請在裝配圖網上搜索。
1、UNIX TCP/IP網絡文件傳輸的實現(xiàn)
摘要:該文著重探討如何利用UNIX TCP/IP所提供的套接字接口和網絡庫例程來編制用戶應用程序,并在此基礎叟實現(xiàn)了網絡文件傳輸。一、引言隨著計算機應用的不斷深入和信息交流的不斷增加,許多UNIX系統(tǒng)用戶越來越感到,僅由一臺高性能微機運行UNIX,帶多臺至幾十臺終端已不能滿足應用的需要,因此,越來越多的系統(tǒng)正在向多用戶網絡方向發(fā)展。UNIX TCP/IP網絡就是解決上述矛盾的一種系統(tǒng)。它將多臺運行UNIX系統(tǒng)的超級微機用電纜線連接起來,采用TCP/IP協(xié)議進行通信,任一微機所連接的終端可登錄到網上其它任一主機
2、上進行操作,也可以通過網絡提供的功能,進行其它網絡操作。SCO UNIX TCP/IP網絡系統(tǒng)為用戶提供了許多通信功能,它包括遠程登錄、文件傳輸、郵件發(fā)送以及其它有關網絡應用、管理及控制方面的命令。這些功能均在命令級實現(xiàn),即用戶只需在命令提示符下鍵入相應的命令,即可完成相應的操作。但是,有許多應用系統(tǒng)對網絡功能的調用是在應用程序運行過程中的,僅通過命令接口是不能完全滿足應用的需要的,因此,用戶必須通過網絡提供的接口編制自己的網絡應用程序。SCO UNIX TCP/IP為用戶提供了一組套接字接口,本文將介紹如何通過調用套接字以及TCP/IP提供的庫函數編制一個文件傳輸應用程序。二、套接字接口及調
3、用1.套接字接口一個用戶應用系統(tǒng),即一個客戶進程,通常需要與一個完成其功能有的服務進程進行通信。在UNIX系統(tǒng)中完成這種進程間通信的一個方法是通過管道(PIPES)來實現(xiàn)的,UNIX網絡運行系統(tǒng)也提供一個更靈活的強有力的獨立子系統(tǒng)以支持一個分布式環(huán)境的進程間通信,這個子系統(tǒng)就稱作套接字(SOCKET)接口。套接字接口構成了在單個主機內及整個網際間的編程界面和進程間通信的基礎。一個套接字是一個軟件實體,它為進程間通信提供了基本的構件,它是進程間通信的端點,對互連網地址來說,下面的一對全名套接字唯一確定了通信雙方的連接:>其中,node是4字節(jié)地址,port為2字節(jié)長,左邊的是本地套接字,右邊是遠
4、程或外部套接字。套接字具有類型,其類型是由面向程序員的通信特性決定的,它與套接字支持的特殊協(xié)議有關。時程通常是在相同類型的套接字之間通信。目前程序員可使用下面三種類型的套接字。流套接字:提供雙向的、可靠的、有序的且不重復的無記錄邊界的數據流,它是最常用的一種類型。數據報套接字:它支持雙向數據流,但記錄邊界被保持,接收進程必須重新定序,消除重復并提供可靠保證,它適用于單個報文的可靠性不重要的場合。原始套接字:使用原始套接字,程序員能訪問低層通信協(xié)議(如IP),它不是為一般用戶設置的,而是為了開發(fā)新的通信協(xié)議,或是為了訪問現(xiàn)有協(xié)議中較隱蔽功能而設置的。2.套接字的調用TCP/IP的系統(tǒng)調用主要是通
5、過對套接字的操作來實現(xiàn)的,下面給出了部分常用的TCP/IP系統(tǒng)調用:scoket 創(chuàng)建套接字bind 為套接字賦一個名字connect 啟動一個連接accept 接受連接listen 監(jiān)聽連接write/send 發(fā)送信息read/recv 接收信息close 關閉套接字三、UNIX網絡庫例程的應用網絡庫例程的主要用途是確定和建立網絡地址。在客戶方與服務方進行通信前,在遠程節(jié)點上確定一個服務需要進行多級映射。為便于使用,每個服務被指定一個名字,這個名字必須被翻譯成網絡地址,最后,該地址被用來確定一個物理位置和到服務的路徑??梢?確定遠程節(jié)點上的一個服務需要三級映射,這三級映射的具體實現(xiàn)隨著網絡
6、結構不同而有所變化。UNIX網絡庫例程是C程序語言函數調用,它提供下列映射的標準例程:主機名字到網絡地址網絡地址到網絡號協(xié)議名字到協(xié)議號服務名字到端口號及服務器使用的適當協(xié)議
1.映射主機名字例程gethostbynamne,gethostbyaddr,gethostent均可完成主機名字與地址映射,它們分別將主機名或節(jié)點地址映射成一個hostent結構:struct hostent{char * h_name;/* 正式主機名 */char * * h_aliasea;/* 別名表 */int h_addrtype;/* 主機的地址類型 */int h_length;/* 地址長度*/
7、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.映射服務名字通
8、過指定一個服務名和一個可選的合法協(xié)議,例程getservbyname,getservbyport,getservent映射服務名字到一個servent結構:struct servent{char * s_name;/* 正式的服務名 */char * * s_aliasea;/* 別名表 */int s_port;/* 服務駐留的端口號 */char * s_proto; /* 所使用的協(xié)議 */}四、文件傳輸程序的編制利用網絡所提供的套接字接口和庫例程,采用客戶/服務器模式來編制文件傳輸程序。程序流程如下:@@T8S09300.GIF;圖1@@在通信之前,要為服務分配端口地址,這個地址分配是
9、在/etc/services文件中設置的。服務方進程啟動后,它創(chuàng)建套接字,指定服務名和合法協(xié)議,并在指定端口地址上監(jiān)聽服務請求。客戶方進程開始后,也要創(chuàng)建套接字,指定服務名和協(xié)議號,并啟動一個與服務方的連接,連接成功后,則立刻開始數據傳送,直到文件傳送結束。五、結束語本文只是在多用戶網絡應用方面的一個初控,利用網絡所提供的接口,我們可以在更深層次對其進行研究,開發(fā)出功能更強、更為靈活、適用的網絡應用軟件。 參考文獻1 蔡傳俊,UNIX/TCP/IP/NFS網絡編程與應用開發(fā)。北京:海洋出版社,1993(1)。2 魏軍等,微機TCP/IP實用指南。北京:北京科海培訓中心,1992(10)。