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