計算機網(wǎng)絡(luò)課件_第1頁
計算機網(wǎng)絡(luò)課件_第2頁
計算機網(wǎng)絡(luò)課件_第3頁
計算機網(wǎng)絡(luò)課件_第4頁
計算機網(wǎng)絡(luò)課件_第5頁
已閱讀5頁,還剩231頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

指導(dǎo)教師:楊建國計算機網(wǎng)絡(luò)二零一零年三月第八章網(wǎng)絡(luò)應(yīng)用編程(需更新)第一節(jié)網(wǎng)絡(luò)應(yīng)用編程實例第二節(jié)網(wǎng)絡(luò)編程語言8.1網(wǎng)絡(luò)聊天程序任務(wù)8.1.1任務(wù)描述

VB提供了一系列的網(wǎng)絡(luò)編程控件,利用它們,網(wǎng)絡(luò)編程將成為一件快樂而簡單的工作。VB網(wǎng)絡(luò)控件主要有三種:(1)Winsok控件主要用于編制基于TCP/IP或UDP協(xié)議的網(wǎng)絡(luò)應(yīng)用程序。(2)InternetTransfer控件主要以來傳輸文件,執(zhí)行FTP命令以及登錄服務(wù)器等。(3)WebBrowser用于創(chuàng)建瀏覽器本節(jié)先介紹Winsok控件。3

聊天服務(wù)程序:由客戶端和服務(wù)端兩個程序組成,采用Winsok控件開發(fā)。這兩個程序可以在同一臺計算機上運行,也可以在網(wǎng)絡(luò)上不同的計算機上運行。整個系統(tǒng)的運行機制是:第一步:建立連接主要過程是:由客戶端程序向服務(wù)端程序發(fā)出連接請求,服務(wù)端程序收到并接受連接請求,至此客戶機與服務(wù)器創(chuàng)建了數(shù)據(jù)交流通道。第二步:開始聊天主要過程是:在客戶機的“發(fā)送的信息”文本框中輸入文字時,服務(wù)器端的“收到的信息”文本框中就會實時地顯示相同的文字,反之亦然。5P215習(xí)題一、填空題1.Winsock控件主要用來編制TCP/IP或

協(xié)議的通話程序。答案:UDP2.在網(wǎng)絡(luò)編程中最常用的方案是

。答案:客戶機/服務(wù)器程序(Client/Server)6P215習(xí)題三、問答題2.簡述網(wǎng)絡(luò)聊天程序的運行過程。答:網(wǎng)絡(luò)聊天程序的運行過程是:第一步:建立連接主要過程是:由客戶端程序向服務(wù)端程序發(fā)出連接請求,服務(wù)端程序收到并接受連接請求,至此客戶機與服務(wù)器創(chuàng)建了數(shù)據(jù)交流通道。第二步:開始聊天主要過程是:在客戶機的“發(fā)送的信息”文本框中輸入文字時,服務(wù)器端的“收到的信息”文本框中就會實時地顯示相同的文字,反之亦然。78.1.3服務(wù)器程序代碼設(shè)計PrivateSubForm_Load()'設(shè)置偵聽端口WinsockServer.LocalPort=10001

'讀取服務(wù)器的IP地址TxtServerIP.Text=WinsockServer.LocalIP

'開始偵聽WinsockServer.ListenEndSubPrivateSubCommand1_Click()'點擊“退出”按鈕后關(guān)閉應(yīng)用程序UnloadMeEndSub98.1.3服務(wù)器程序代碼設(shè)計PrivateSubCommand2_Click()'只要txtSend文本框的內(nèi)容寫好以后就由WinsockServer控件發(fā)送WinsockServer.SendDataTxtSend.TextEndSubPrivateSubWinsockServer_ConnectionRequest(ByValrequestIDAsLong)'當(dāng)收到連接請求時,Winsock處于偵聽狀態(tài)'此時應(yīng)該使用Close方法關(guān)閉Winsock,然后使用Accept方法接受連接請求WinsockServer.CloseWinsockServer.AcceptrequestIDEndSub108.1.3服務(wù)器程序代碼設(shè)計PrivateSubWinsockServer_DataArrival(ByValBytesTotalAsLong)'當(dāng)客戶端有信息發(fā)送來時,利用WinsockServer控件的GatData方法讀取數(shù)據(jù)'并將其顯示在txtReceive文本框中DimMyStrAsStringWinsockServer.GetDataMyStrTxtReceive.Text=MyStrEndSub118.1.4.客戶機的程序代碼設(shè)計PrivateSubForm_Load()'設(shè)置聊天服務(wù)器的偵聽端口WinsockClient.RemotePort=10001

'讀取本機的IP地址txtClientIP.Text=WinsockClient.LocalIPEndSubPrivateSubCommand1_Click()'點擊“退出”按鈕后關(guān)閉應(yīng)用程序UnloadMeEndSub138.1.4.客戶機的程序代碼設(shè)計PrivateSubCommand2_Click()'根據(jù)txtServerIP文本框中輸入的服務(wù)器IP,連接聊天服務(wù)器WinsockClient.RemoteHost=txtServerIP.TextWinsockClient.ConnectEndSubPrivateSubCommand3_Click()'輸入txtSend文本框的內(nèi)容后由WinsockServer控件發(fā)送WinsockClient.SendDatatxtSend.TextEndSub148.1.4.客戶機的程序代碼設(shè)計PrivateSubWinsockClient_Connect()'如果與服務(wù)器連接成功,則向用戶提供下列信息MsgBox"你成功地與聊天服務(wù)器進行了連接",vbInformationEndSubPrivateSubWinsockClient_DataArrival(ByValBytesTotalAsLong)'當(dāng)服務(wù)器有信息發(fā)送來時,利用WinsockClient控件的GatData方法讀取數(shù)據(jù)'并將其顯示在txtReceive文本框中DimMyStrAsStringWinsockClient.GetDataMyStrtxtReceive.Text=MyStrEndSub158.2Winsock控件及網(wǎng)絡(luò)應(yīng)用程序設(shè)計基礎(chǔ)Winsock控件是建立在TCP協(xié)議的基礎(chǔ)上,能夠完成遠程計算機間的通信,用途非常廣泛。即使我們對TCP/IP,TCP這些知識不太熟悉,只要理解了網(wǎng)絡(luò)應(yīng)用程序設(shè)計的一般原理,并對Winsock的主要屬性、方法和事件有所了解,也可以在很短時間內(nèi)創(chuàng)建一個簡單的網(wǎng)絡(luò)通信程序。178.2.1Winsock控件的主要屬性Winsock控件主要有八個屬性:1.BytesReceived屬性:返回接收到的數(shù)據(jù)。通常用GetData方法來獲取這些數(shù)據(jù)。2.LocalHostName屬性:返回本地計算機的名稱。3.LocalIP屬性:返回本地計算機的IP地址。4.LocalPost屬性:返回或者設(shè)置所用的端口,如果設(shè)置為0,則使用隨機端口。5.Protocol屬性:返回或設(shè)置Winsock所用的協(xié)議(TCP或UDP)。6.RemoteHostName屬性,返回或設(shè)置遠程計算機的名稱。7.RemoteHostIP屬性,返回遠程計算機的IP地址。8.State屬性:返回Winsock控件的當(dāng)前狀態(tài)。18Winsock控件的State屬性198.2.2Winsock控件的主要方法Winsock控件的方法主要有六個:1.Listen方法語法:Winsock對象.Listen作用:使服務(wù)器處于偵聽狀態(tài),等待客戶訪問。2.Connect方法語法:Winsock對象.Connect[遠程主機IP,遠程端口]作用:用于向遠程主機發(fā)出連接請求。3.Accept方法語法:Winsock對象.AcceptRequestID作用:用于接受一個連接請求,其中RequestID是客戶機發(fā)來的請求信號218.2.2Winsock控件的主要方法Winsock控件的方法主要有六個:4.SendData方法語法:Winsock對象.SendData數(shù)據(jù)作用:用于發(fā)送數(shù)據(jù)5.GetData方法語法:Winsock對象.GetData變量[數(shù)據(jù)類型[,最大長度]作用:用來獲得接收到的數(shù)據(jù)6.Clcse方法語法:Winsock對象.Close作用:關(guān)閉當(dāng)前連接22P215習(xí)題二、填空題5.Winsock1.Listen語句的含義是

。答案:LocalIP使服務(wù)器處于偵聽狀態(tài),等待客戶訪問。23P214習(xí)題一、單項選擇題1.一旦數(shù)據(jù)到達,將首先觸發(fā)Winsock控件的()。A.DataArrival事件B.ConnectionRequest事件C.DataSand事件D.DataGet事件答案:B25P214習(xí)題一、單項選擇題2.要發(fā)送數(shù)據(jù),通常使用Winsock控件的()。A.SendData方法B.Listen方法C.Accept方法D.GetData方法答案:A26P214習(xí)題一、單項選擇題5.當(dāng)使用SendData將數(shù)據(jù)發(fā)送到主機后時,將觸發(fā)的Winsock控件的是()。A.SendProgressB.MouseDownC.ClickD.KeyPress答案:A298.2.4網(wǎng)絡(luò)應(yīng)用程序設(shè)計基礎(chǔ)1.基于Socket的通信過程Winsock控件是基于Socket接口(套接字)創(chuàng)建的。它是現(xiàn)在TCP/IP網(wǎng)絡(luò)中最通用的API(應(yīng)用程序接口),也是在Internet上進行應(yīng)用程序開發(fā)最通用的API。WindowsSocket規(guī)范已成為Windows網(wǎng)絡(luò)編程的標(biāo)準(zhǔn)。Socket在計算機中提供了一個通信端口,可以通過這個端口與任何一個也同樣具有Socket接口的計算機進行通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸、接收的信息都通過這個Socket接口來實現(xiàn)?;赟ocket的通信過程如下頁圖所示:30SocketSocket應(yīng)用程序A發(fā)送發(fā)送接收接收應(yīng)用程序B通信細節(jié)利用Socket進行網(wǎng)絡(luò)編程,只需對Socket接口進行數(shù)據(jù)的讀寫操作,根本不必關(guān)心兩臺計算機間的通信細節(jié)就能夠完成數(shù)據(jù)的發(fā)送和接收工作。31SocketSocket應(yīng)用程序A發(fā)送發(fā)送接收接收應(yīng)用程序B通信細節(jié)利用Socket進行網(wǎng)絡(luò)編程,只需對Socket接口進行數(shù)據(jù)的讀寫操作,根本不必關(guān)心兩臺計算機間的通信細節(jié)就能夠完成數(shù)據(jù)的發(fā)送和接收工作。P215習(xí)題三問答題1.簡述基于Socket的通信過程。322.基于Winsock控件的開發(fā)模式VB提供的Winsock控件正是基于Socket規(guī)范創(chuàng)建的。利用Winsock控件開發(fā)網(wǎng)絡(luò)通信系統(tǒng)時,通常要涉及到服務(wù)器和客戶機兩類應(yīng)用程序:(1)服務(wù)器程序的開發(fā)模式服務(wù)器程序必須設(shè)置好LocalPort屬性,作為偵聽端口。該值可設(shè)置成任何一個整數(shù),只要其它應(yīng)用程序沒有使用過的值即可,單習(xí)慣上應(yīng)大于1000。使用Listen方法使服務(wù)器進入偵聽狀態(tài),等待客戶機的連接請求。332.基于Winsock控件的開發(fā)模式(1)服務(wù)器程序的開發(fā)模式客戶機程序發(fā)出連接請求后,將觸發(fā)服務(wù)器程序的ConnectionRequest事件,該事件得到一個參數(shù)RequestID。服務(wù)器程序使用Accept方法接受客戶機程序的RequestID請求。至此,服務(wù)器程序就可以使用SendData方法向客戶機發(fā)送數(shù)據(jù)了。當(dāng)服務(wù)器接收到數(shù)據(jù)時,會產(chǎn)生DataArrival事件。在該事件中可使用GetData方法接收數(shù)據(jù)。34(2)客戶機程序的開發(fā)模式

●首先設(shè)置好RemoteHost屬性,用來指向運行服務(wù)器程序的遠程計算機的的主機名或IP地址。

●設(shè)置RemotePort屬性,用來指向服務(wù)器程序的偵聽端口號。

●使用Connect方法向服務(wù)器提出連接請求。

●如果服務(wù)器接受了上述請求,客戶機程序就會產(chǎn)生Connect事件,可以根據(jù)需要,在此事件中編寫程序,比如使用MsgBox函數(shù)向用戶提示“連接已成功”之類的信息。

●連接成功后,就可以根據(jù)需要使用SendData方法向服務(wù)器發(fā)送數(shù)據(jù)了。

●當(dāng)客戶機程序接收的數(shù)據(jù)時,就會產(chǎn)生DataArrival事件,可以用GetData方法接收數(shù)據(jù)。35P215習(xí)題三、問答題3.簡述基于Winsock控件的開發(fā)過程。答:1)服務(wù)器程序的開發(fā)模式服務(wù)器程序必須設(shè)置好LocalPort屬性,作為偵聽端口。使用Listen方法使服務(wù)器進入偵聽狀態(tài),等待客戶機的連接請求??蛻魴C程序發(fā)出連接請求后,將觸發(fā)服務(wù)器程序的ConnectionRequest事件,該事件得到一個參數(shù)RequestID。服務(wù)器程序使用Accept方法接受客戶機程序的RequestID請求。至此,服務(wù)器程序就可以使用SendData方法向客戶機發(fā)送數(shù)據(jù)了。當(dāng)服務(wù)器接收到數(shù)據(jù)時,會產(chǎn)生DataArrival事件。在該事件中可使用GetData方法接收數(shù)據(jù)。36P215習(xí)題三、問答題3.簡述基于Winsock控件的開發(fā)過程。2)客戶機程序的開發(fā)模式首先設(shè)置好RemoteHost屬性,用來指向運行服務(wù)器程序的遠程計算機的的主機名或IP地址。設(shè)置RemotePort屬性,用來指向服務(wù)器程序的偵聽端口號。使用Connect方法向服務(wù)器提出連接請求。如果服務(wù)器接受了上述請求,客戶機程序就會產(chǎn)生Connect事件。連接成功后,就可以根據(jù)需要使用SendData方法向服務(wù)器發(fā)送數(shù)據(jù)了。當(dāng)客戶機程序接收的數(shù)據(jù)時,就會產(chǎn)生DataArrival事件,可以用GetData方法接收數(shù)據(jù)。378.3其它網(wǎng)絡(luò)應(yīng)用程序設(shè)計8.3.1局域網(wǎng)中保證聯(lián)網(wǎng)計算機時間同步當(dāng)采用客戶機/服務(wù)器模式在局域網(wǎng)上開發(fā)系統(tǒng)時,必須保證所有計算機的時鐘時間一致。在就需要用到統(tǒng)一的時間,以便協(xié)調(diào)工作,最號的方法就是通過程序的方法,解決時鐘同步的問題。38數(shù)據(jù)服務(wù)器MyServer應(yīng)用程序1應(yīng)用程序2應(yīng)用程序n……這是某一應(yīng)用系統(tǒng)的網(wǎng)絡(luò)拓補結(jié)構(gòu),我們可以采用Winsock控件解決眾多客戶機與數(shù)據(jù)服務(wù)器間的時間同步問題。39解決時鐘同步的基本思路是:首先精確調(diào)整服務(wù)器的時鐘,然后,當(dāng)客戶機啟動時與服務(wù)器連接,并與服務(wù)器“對時”。這樣,每當(dāng)執(zhí)行應(yīng)用程序時,客戶機就會與服務(wù)器時鐘同步了。404.如何保證局域網(wǎng)中聯(lián)網(wǎng)的計算機同步運行?答:解決時鐘同步的基本思路是:首先精確調(diào)整服務(wù)器的時鐘,然后,當(dāng)客戶機啟動時與服務(wù)器連接,并與服務(wù)器“對時”。這樣,每當(dāng)執(zhí)行應(yīng)用程序時,客戶機就會與服務(wù)器時鐘同步了。P215習(xí)題三、問答題

411.客戶機程序的主要代碼(1)與服務(wù)器建立連接在客戶機主窗體的Load事件中連接服務(wù)器程序,具體方法與聊天程序相同。PrivateSubForm_Load()'設(shè)置聊天服務(wù)器的偵聽端口WinsockClient.RemotePort=10001'讀取本機的IP地址txtClientIP.Text=WinsockClient.LocalIP'根據(jù)txtServerIP文本框中輸入的服務(wù)器IP,連接聊天服務(wù)器WinsockClient.RemoteHost=txtServerIP.TextWinsockClient.Connect'如果與服務(wù)器連接成功,則向用戶提供下列信息MsgBox"你成功地與聊天服務(wù)器進行了連接",EndSub42(2)其它代碼PrivateSubWinsockClient_DataArrival(ByValbytesTotal)’當(dāng)收到服務(wù)器發(fā)來的數(shù)據(jù)時,完成以下工作:’(1)日期數(shù)據(jù)類型接收數(shù)據(jù);’(2)設(shè)置本機的系統(tǒng)日期’定義一個日期類型數(shù)據(jù)變量DimMyDateAsDate

’以日期數(shù)據(jù)類型接受服務(wù)器日期數(shù)據(jù)WinsockClient.GetDataMyDate,VbDate

’使本機的系統(tǒng)日期等于服務(wù)器日期Date=MyDateEndSub432.服務(wù)端程序主要代碼PrivateSubWinsockServer_ConnectionRequest_(ByValRequestIDAsLong)’當(dāng)收到客戶機的連接請求時,完成以下工作:’(1)結(jié)束Winsock的偵聽狀態(tài);’(2)接受連接請求;’(3)將服務(wù)器的系統(tǒng)日期發(fā)送給客戶機WinsockServer.CloseWinsockServer.AcceptRequestID

’將系統(tǒng)當(dāng)前的時間Date發(fā)送給提出請求的客戶機WinsockServer.SendDateEndSub448.3.2Web瀏覽器1.一個簡單的瀏覽器應(yīng)用程序示例(1)創(chuàng)建一個新的“標(biāo)準(zhǔn)EXE”工程。利用“工程”菜單的“部件”選項添加“WindowsInternetControls”以獲得對WebBrowser控件的支持。(2)在Form1窗口上添加Text1、Command1和WebBrowser1等控件。(3)在Command1控件的Click事件中,添加如下代碼:PrivateSubCommand1_Click()’連接要瀏覽的網(wǎng)站地址WebBrowser1.NavigateText1.TextEndSub(4)運行程序。在Text1輸入網(wǎng)址后,單擊Command1連接按鈕,即可進入有關(guān)網(wǎng)頁。(演示)452.一個較完整的瀏覽器應(yīng)用程序一個真正的瀏覽器(比如IE)至少需要后退(Back)、前進(Forword)、停止(Stop)、刷新(Refresh)、主頁(Home)和搜索(Search)等功能按鈕,還能夠顯示當(dāng)前網(wǎng)頁的下載速度。要完成這些工作,就必須深入學(xué)習(xí)WebBrowser控件的有關(guān)知識。46(1)LocationURL和LocationName屬性LocationURL屬性返回裝入網(wǎng)頁的地址,LocationName屬性則返回當(dāng)前裝入網(wǎng)頁的標(biāo)題。它們均是只讀的,不能通過VB程序改變其值。(2)ProgressChange事件下載網(wǎng)頁通常會花費一定的時間,可利用ProgressChange事件了提醒用戶當(dāng)前下載的進度。只要網(wǎng)頁正在下載,改事件就會被周期性地觸發(fā)。可將該事件與Progress控件結(jié)合使用,實現(xiàn)下載進度條提示效果。(3)停止網(wǎng)頁下載的方法當(dāng)用戶覺得下載一個網(wǎng)頁花費的時間太長而想終止下載時,可使用Stop方法。47(4)后退與前進的方法如果要實現(xiàn)大多數(shù)瀏覽器所具有的后退與前進功能,則可以使用GoBack,GoForword方法。這兩個方法的基本原理是:對Windows目錄下的History文件夾進行搜索,重新調(diào)出已查看過的HTMT頁面緩存,從而完成后退與前進的功能。但如果要得到當(dāng)前網(wǎng)頁的最新內(nèi)容,則要使用Refresh方法進行刷新。此外,如果想要在自己的瀏覽器程序中加入主頁,搜索等功能,則可以使用GoHome,GoSearch方法。(5)DownLoadBegin和DownLoadComplete事件當(dāng)網(wǎng)頁下載工作開始和結(jié)束時,分別觸發(fā)這兩個事件。這兩個事件通常與ProgressChange事件結(jié)合使用,起到提示用戶的作用。48演示程序“Web瀏覽器”49

網(wǎng)絡(luò)編程技術(shù)2023/2/6徐敏

User:xuminPassword:23250參考書籍WindowsSockets網(wǎng)絡(luò)程序設(shè)計大全清華大學(xué)出版社蔣東興等編著Windows網(wǎng)絡(luò)編程技術(shù)機械工業(yè)出版社AnthonyJones/JimOhlundMicrosoftPressVisualc++網(wǎng)絡(luò)通信程序開發(fā)指南機械工業(yè)出版社郎銳羅發(fā)根編著51課程簡介

網(wǎng)絡(luò)編程是指利用網(wǎng)絡(luò)編程接口來編寫在網(wǎng)絡(luò)上交換信息的應(yīng)用程序。本課程主要講授帶有共性的網(wǎng)絡(luò)編程的原理和方法,并在windows下對網(wǎng)絡(luò)程序設(shè)計的各種方法進行實踐。52第一章緒論531-1概述

計算機網(wǎng)絡(luò)程序設(shè)計就是利用網(wǎng)絡(luò)應(yīng)用編程接口編寫網(wǎng)絡(luò)應(yīng)用程序,實現(xiàn)網(wǎng)絡(luò)應(yīng)用進程間的信息交互功能。應(yīng)用進程間的通信可以分為兩種:同一系統(tǒng)上的應(yīng)用進程間的通信(IPC)實現(xiàn)方法:文件、管道、消息隊列、共享存儲段和信號燈不同系統(tǒng)上的進程間的通信計算機網(wǎng)絡(luò)程序設(shè)計就是利用網(wǎng)絡(luò)應(yīng)用編程接口編寫網(wǎng)絡(luò)應(yīng)用程序,實現(xiàn)網(wǎng)絡(luò)應(yīng)用進程間的信息交互功能。學(xué)習(xí)網(wǎng)絡(luò)編程,必須具備操作系統(tǒng)、計算機網(wǎng)絡(luò)、以及編程語言基礎(chǔ)。541.2網(wǎng)絡(luò)服務(wù)

應(yīng)用層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層55應(yīng)用程序訪問TCP/IP協(xié)議提供的服務(wù)來實現(xiàn)網(wǎng)絡(luò)上進程間的通信。網(wǎng)絡(luò)應(yīng)用編程的目的是如何利用各協(xié)議層所提供的功能實現(xiàn)用戶的應(yīng)用.通過應(yīng)用編程接口訪問某一協(xié)議層提供的服務(wù),事實上還需要間接用到其下各層提供的服務(wù)。56571-2-1傳輸層服務(wù)傳輸層的任務(wù)是根據(jù)下面通信子網(wǎng)的特性最佳地利用網(wǎng)絡(luò)資源,并以可靠和經(jīng)濟的方式為兩端主機上的進程之間透明地傳送報文。TCP/IP協(xié)議棧中的兩個最主要的傳輸層協(xié)議是TCP和UDP。TCP提供可靠的、有序的、端到端的數(shù)據(jù)傳輸服務(wù)。UDP則提供的是不可靠的、不保證有序到達的、端到端的數(shù)據(jù)傳輸服務(wù)。581-2-2數(shù)據(jù)鏈路層服務(wù)數(shù)據(jù)鏈路層負責(zé)在兩個相鄰結(jié)點間的鏈路上,無差錯地傳送以幀為單位的數(shù)據(jù)。數(shù)據(jù)鏈路層要負責(zé)建立、維護和釋放數(shù)據(jù)鏈路的連接。在傳送數(shù)據(jù)時,若接收結(jié)點檢測到數(shù)據(jù)有差錯,就要通知發(fā)方重發(fā)這一幀,直到這一幀正確到達接收結(jié)點為止。591-3網(wǎng)絡(luò)應(yīng)用編程接口網(wǎng)絡(luò)應(yīng)用編程接口(API)是網(wǎng)絡(luò)應(yīng)用程序訪問網(wǎng)絡(luò)協(xié)議提供的服務(wù)的橋梁。流行的網(wǎng)絡(luò)應(yīng)用編程接口Berkeley插口APIBerkeley插口是在1983年由4.2BSDUnix引入的網(wǎng)絡(luò)編程接口WindowsSocketsWinSock是以Berkeley插口API為范例定義的一套MicrosoftWindows下的網(wǎng)絡(luò)編程接口60可視化編程環(huán)境下的網(wǎng)絡(luò)控件在VC、VB、Delphi、PowerBuilder等可視化編程工具中,大部分網(wǎng)絡(luò)編程都是通過網(wǎng)絡(luò)控件來進行的其它網(wǎng)絡(luò)編程接口遠程過程調(diào)用(RPC)是由本地系統(tǒng)上的進程激活遠程系統(tǒng)上的進程,由遠程過程完成某項任務(wù)后將結(jié)果返回給本地進程。611-4網(wǎng)絡(luò)編程模式網(wǎng)絡(luò)編程模式一般采用客戶-服務(wù)器模式;大多數(shù)應(yīng)用系統(tǒng)由兩部分組成:客戶(client)和服務(wù)器(Server);客戶和服務(wù)器的通信關(guān)系一旦建立,它們就可以相互接收和發(fā)送消息;根據(jù)實現(xiàn)方式的不同,服務(wù)器分為串行服務(wù)器和并發(fā)服務(wù)器;并發(fā)服務(wù)器又可分為預(yù)先創(chuàng)建服務(wù)子進程并發(fā)服務(wù)器預(yù)先創(chuàng)建服務(wù)線程并發(fā)服務(wù)器按需創(chuàng)建服務(wù)子進程并發(fā)服務(wù)器按需創(chuàng)建服務(wù)線程并發(fā)服務(wù)器621-5網(wǎng)絡(luò)編程要考慮的問題 網(wǎng)絡(luò)程序設(shè)計因為涉及到不同平臺之間的信息交互,它比單機上的程序設(shè)計要復(fù)雜很多,以下問題需要注意:并發(fā)環(huán)境下的網(wǎng)絡(luò)編程異構(gòu)環(huán)境下的網(wǎng)絡(luò)編程阻塞與非阻塞通信服務(wù)類型的選擇631-5-1并發(fā)環(huán)境下的網(wǎng)絡(luò)編程在多進程或多線程應(yīng)用中,涉及到資源共享、進程或線程間的同步,因而更復(fù)雜。在多進程或多線程應(yīng)用中,使用的系統(tǒng)調(diào)用或函數(shù)必須是可重入的。(所謂可重入函數(shù)是指一個可以被多個任務(wù)調(diào)用的過程,任務(wù)在調(diào)用時不必擔(dān)心數(shù)據(jù)是否會出錯。)對于不可重入的調(diào)用或函數(shù),系統(tǒng)如果沒有提供多線程安全的版本,程序員需要避免使用或自己編寫相應(yīng)的函數(shù)。641-5-2異構(gòu)環(huán)境下的網(wǎng)絡(luò)編程 網(wǎng)絡(luò)通信常常是在不同的操作系統(tǒng)之間運行,所以網(wǎng)絡(luò)應(yīng)用程序必須考慮不同的OS之間的差異,尤其是不同OS上的數(shù)據(jù)格式的差異。字節(jié)順序大數(shù)在前的字節(jié)順序:指將一個多字節(jié)數(shù)的高序字節(jié)存儲在內(nèi)存的起始地址小數(shù)在前的字節(jié)順序:指將一個多字節(jié)數(shù)的低序字節(jié)存儲在內(nèi)存的起始地址字的長度不同的OS對于相同的數(shù)據(jù)類型可能有不同的表示長度。字節(jié)邊界問題不同的OS對相同的數(shù)據(jù)類型打包方式不相同,因為它們的定界限制不一樣。65例如:結(jié)構(gòu)struct{chara;intb}解決方法方法一:對于具有相同字節(jié)順序的OS,通信雙方均以單字節(jié)定界;對于具有不同字節(jié)順序的OS,顯示地定義格式(位數(shù)、字節(jié)順序類型)方法二:將需要發(fā)送的消息的結(jié)構(gòu)在發(fā)送前變換成一種統(tǒng)一的格式,到達接收方后再執(zhí)行相反的過程。661-5-3阻塞與非阻塞通信阻塞模式通信:利用TCP協(xié)議發(fā)送一個報文時,如果低層協(xié)議沒有可用空間來存放用戶數(shù)據(jù),則應(yīng)用進程將阻塞等待直到協(xié)議有可用的空間;在應(yīng)用進程調(diào)用接收函數(shù)接收報文時,若沒有到達的數(shù)據(jù),則調(diào)用將一直阻塞直到有數(shù)據(jù)到達或出錯;對于面向連接的協(xié)議,如果沒有連接請求到達,則等待連接調(diào)用將阻塞直到有連接請求到達;67非阻塞模式通信利用TCP協(xié)議發(fā)送一個報文時,如果低層協(xié)議沒有可用空間來存放用戶數(shù)據(jù),調(diào)用將直接返回而不需等待;在應(yīng)用進程調(diào)用接收函數(shù)接收報文時,若沒有到達的數(shù)據(jù),則調(diào)用將直接返回而不需等待;對于面向連接的協(xié)議,如果沒有連接請求到達,等待連接調(diào)用將直接返回;68兩種通信方式的優(yōu)缺點在非阻塞模式下,應(yīng)用程序不斷地輪詢查看是否有數(shù)據(jù)到達或有連接請求到達。這種輪詢方式比其他的技術(shù)耗費更多的CPU時間,因而要盡量避免使用,可以采用多路復(fù)用技術(shù)來解決這一問題阻塞模式的缺點是進程或線程在執(zhí)行I/O操作時將被阻塞而不能執(zhí)行其它的工作,所以在單進程或單線程應(yīng)用中不能使用這種模式,在多線程應(yīng)用中比較適合采用阻塞模式,一個線程被阻塞不影響其它線程的工作691-5-4服務(wù)類型的選擇從通信的角度看,網(wǎng)絡(luò)協(xié)議棧中的各層所提供的服務(wù)可以分為兩大類:面向連接服務(wù)與無連接服務(wù)面向連接服務(wù):所謂連接,就是兩個對等實體為進行數(shù)據(jù)通信而進行的一種結(jié)合。在數(shù)據(jù)交換之前,必須先建立連接;當(dāng)數(shù)據(jù)交換結(jié)束后,而應(yīng)終止這個連接;面向連接服務(wù)過程分為三個階段:連接建立、數(shù)據(jù)傳輸和連接釋放;在TCP/IP協(xié)議棧中,TCP協(xié)議提供面向連接的服務(wù)。70無連接服務(wù):無連接服務(wù)指的是兩個實體之間的通信不需要先建立好一條連接,其所需的下層資源在數(shù)據(jù)傳輸時動態(tài)地進行分配無連接服務(wù)的優(yōu)點是靈活方便和效率高;但它不能防止報文的丟失、重復(fù)或失序無連接服務(wù)又可分為三種類型:數(shù)據(jù)報:不需要接收端做任何響應(yīng)證實交付:這種服務(wù)對每一個報文都產(chǎn)生一個證實給發(fā)方,不過這個證實不是來自接收端的用戶而是來自提供服務(wù)的協(xié)議層。請求應(yīng)答:這種服務(wù)對每一個報文都產(chǎn)生一個證實給發(fā)方,不過這個證實是來自接收端的用戶。71項目\服務(wù)類型面向連接服務(wù)無連接服務(wù)端到端的連接必須有不需要目的站地址僅在連接建立階段使用每個分組都要有目的站的完整地址路由選擇在連接建立時確定每個分組獨立選擇路由分組的順序總是按發(fā)送順序到達目的站到達目的站的順序可能與發(fā)送順序不同端端排序由通信子網(wǎng)負責(zé)由主機負責(zé)端端的差錯處理和端端的流量控制由通信子網(wǎng)負責(zé)由主機負責(zé)靈活性差好可靠性好差效率低高適用場合適合有許多連續(xù)報文且要求可靠、有序地數(shù)據(jù)發(fā)送適合少量零星報文、且可靠性要求不高的數(shù)據(jù)傳送兩種服務(wù)的比較72小結(jié) 本章我們學(xué)習(xí)了計算機網(wǎng)絡(luò)程序設(shè)計中的一些基本概念、內(nèi)容和方法,包括:網(wǎng)絡(luò)應(yīng)用程序所訪問的網(wǎng)絡(luò)服務(wù)網(wǎng)絡(luò)程序設(shè)計模式網(wǎng)絡(luò)程序設(shè)計所依賴的網(wǎng)絡(luò)應(yīng)用編程接口網(wǎng)絡(luò)程序設(shè)計要特別考慮的問題73ServerClientServiceshttp(80)SMTP(25))telnet(23)74網(wǎng)絡(luò)編程語言沈衛(wèi)平75762008編程語言走勢解盤Java類語言:Java似乎會逐漸走下坡。J2ME會受到GoogleAndroid、AdobeFlashLite、.NETCompactFramework的影響;J2SE的對手則是.NET和AIR;J2EE在中小型網(wǎng)站受到PHP、Ruby-on-Rails(RoR)很大的沖擊。幸好,目前大型企業(yè)好像還是買J2EE的帳。在J2ME和J2SE方面,未來似乎可以用JavaFX奮力一搏;在J2EE方面,也有Groovy/Grails可以抵擋RoR。尤其目前大家懷疑PHP和RoR只適合用在中小型網(wǎng)站,大型企業(yè)網(wǎng)站似乎還是用J2EE比較安心,Groovy/Grails可以保障大家在J2EE上既有的投資。如果你是Java愛好者,最近有點想改用RoR,那么你可以去看看Grails,或許你會因此想繼續(xù)留在Java陣營。772008編程語言走勢解盤PHP語言:因為PHP對初學(xué)者相當(dāng)友善,所以過去這幾年使用者數(shù)量增加快速,但是似乎已經(jīng)到達瓶頸,這可能是RoR造成的。隨著RoR推出新版,PHP會受到更大的挑戰(zhàn)。連開發(fā)工具廠商CodeGear都在2007年推出Ruby和PHP的開發(fā)工具,顯見這兩個語言似乎都會逐漸走入企業(yè)市場。Python語言:Python早就移植到.NET和Java,2008年會持續(xù)推出修訂版本,而且也會推出全新的Python3000。Python3000不以相容于2.x版為目的,而是要運用過去培養(yǎng)出來的經(jīng)驗,徹底翻新Python。目前Python編程員的需求也已經(jīng)超越Perl。782008編程語言走勢解盤Perl語言:目標(biāo)遠大是一件好事,但目標(biāo)遠大卻沒有足夠的資源可以完成目標(biāo),就會陷入絕境。Perl6就是這樣的例子,它比.NET更早提出,但這幾年下來,.NET已經(jīng)從1.0進入到3.5,Perl6卻連1.0都還沒誕生。Perl擅長文字數(shù)據(jù)處理,但是在大部分語言都支持RegularExpression,加上文字數(shù)據(jù)大量XML化之后,Perl的優(yōu)勢已經(jīng)消失大半。Ruby語言:Ruby可能會在2008年推出2.0,加上2007年底已經(jīng)推出的RoR2.0,Ruby整個就是一股擋不住的氣勢。可能在2008年底之前,Ruby在TIOBE的排行榜上就會超越Perl,只剩下Python和PHP這兩個對手了。792008編程語言走勢解盤JavaScript語言:Web應(yīng)用蔚為主流,而JavaScript又是瀏覽器的標(biāo)準(zhǔn)語言,所以這幾年來相當(dāng)受到重視。在Adobe推出AIR,Mozilla推出Prism之后,JavaScript可以開發(fā)出「某些種類」的桌面應(yīng)用,JavaScript的用途變得更廣。而JavaScript的兄弟ActionScript,隨著AIR的推出又會更受歡迎一些,但是Silverlight的推出,又會抵銷ActionScript成長力道。802008編程語言走勢解盤C語言:系統(tǒng)語言語言方面,C語言的地位還是一樣重要,C++則會慢慢走下坡;D語言崛起,將會接收相當(dāng)多原來C++的使用者,而Delphi則是一蹶不振,當(dāng)年Delphi/Kylix跨Windows/Linux的美夢已然消失。D語言:多年來,D語言平均一個月推出兩個版本,改版速度相當(dāng)快,在2007年1月推出1.0版后,不出幾個月,又推出2.0版。1.0版持續(xù)做bug修訂,盡量不加新特色,2.0版則繼續(xù)進行實驗性的翻修。雖然D語言1.0才正式推出1年,但已經(jīng)成為相當(dāng)受歡迎的系統(tǒng)語言,可惜至今仍然沒有很好用的IDE。812008編程語言走勢解盤Lua、PowerShell、Erlang語言:可說是未來幾年竄升力道最強的潛力之星,但都還不至于成為主流語言。Lua是相當(dāng)小的語言,適合嵌入其他的環(huán)境中,和其他語言一同使用,根據(jù)TIOBE開發(fā)語言排行榜數(shù)據(jù)顯示,這幾年Lua越來越受到重視,尤其2007年Lua更是往上猛竄二十幾個名次,由此可見Lua的需求大增。隨著WindowsVista系統(tǒng)的出貨,未來幾年P(guān)owerShell會成為相當(dāng)重要的系統(tǒng)管理語言。目前的多核心環(huán)境、網(wǎng)絡(luò)分布式計算、容錯的需求,則讓Erlang持續(xù)受到重視。822008編程語言走勢解盤在2007年第三季,AppleiPhone在美國的Smartphone市場占有率已經(jīng)到達27%,超過WindowsMobile。繼美洲和歐洲之后,2008年iPhone會在亞洲開始販賣,并推出第二代機種,也預(yù)計在2008年推出SDK(軟件開發(fā)工具包),讓我們可以為iPhone寫原生(Native)程序。所以,如果你需要為Smartphone開發(fā)應(yīng)用,除了考慮WindowsMobile之外,你也必須思考是否要用Objective-C語言開發(fā)的MacOS應(yīng)用了(iPhone使用精簡版的MacOSX)。832008編程語言走勢解盤轉(zhuǎn)換語言的成本通常很高,所以一年之內(nèi),各個語言通常不會有太大的興衰變化,這里是描述以2008為中心,前后數(shù)年期間各類編程語言的整體狀況;把時間拉長,發(fā)展態(tài)勢會比較明顯,不受到短期震蕩的影響,預(yù)測未來就不至于太過離譜,讓大家當(dāng)作未來選擇語言的參考。84WEB2.0互聯(lián)網(wǎng)下一步,是要讓所有的人都忙起來,全民織網(wǎng),然后用軟件,機器的力量使這些信息更容易被需要的人找到和瀏覽。如果說WEB1.0是以數(shù)據(jù)為核心的網(wǎng),那WEB2.0是以人為出發(fā)點的互聯(lián)網(wǎng)。我們看一看最近的一些WEB2.0產(chǎn)品,就可以理解以上觀點。

Blog:用戶織網(wǎng),發(fā)表新知識,和其他用戶內(nèi)容鏈接,進而非常自然的組織這些內(nèi)容。

RSS:用戶產(chǎn)生內(nèi)容自動分發(fā),定閱

Podcasting:個人視頻/聲頻的發(fā)布/定閱

SNS:blog+人和人之間的鏈接

WIKI:用戶共同建設(shè)一個大百科全書85WEB2.0從知識生產(chǎn)的角度看,WEB1.0的任務(wù),是將以前沒有放在網(wǎng)上的人類知識,通過商業(yè)的力量,放到網(wǎng)上去。WEB2.0的任務(wù)是,將這些知識,通過每個用戶的瀏覽求知的力量,協(xié)作工作,把知識有機的組織起來,在這個過程中繼續(xù)將知識深化,并產(chǎn)生新的思想火花;

從內(nèi)容產(chǎn)生者角度看,WEB1.0是商業(yè)公司為主體把內(nèi)容往網(wǎng)上搬,而WEB2.0則是以用戶為主,以簡便隨意方式,通過blog/podcasting方式把新內(nèi)容往網(wǎng)上搬;

從交互性看,WEB1.0是網(wǎng)站對用戶為主;WEB2.0是以P2P為主。

從技術(shù)上看,WEB客戶端化,工作效率越來越高。比如像Ajax技術(shù),GoogleMAP/Gmail里面用得出神入化。

我們看到,用戶在互聯(lián)網(wǎng)上的作用越來越大;他們貢獻內(nèi)容,傳播內(nèi)容,而且提供了這些內(nèi)容之間的鏈接關(guān)系和瀏覽路徑。在SNS里面,內(nèi)容是以用戶為核心來組織的。WEB2.0是以用戶為核心的互聯(lián)網(wǎng)。

86REST

(RepresentationalStateTransfer)

REST軟件架構(gòu)是由RoyThomasFielding博士在2000年首次提出的。他為我們描繪了開發(fā)基于互聯(lián)網(wǎng)的網(wǎng)絡(luò)軟件的藍圖。REST軟件架構(gòu)是一個抽象的概念,是一種為了實現(xiàn)這一互聯(lián)網(wǎng)的超媒體分布式系統(tǒng)的行動指南。利用任何的技術(shù)都可以實現(xiàn)這種理念。而實現(xiàn)這一軟件架構(gòu)最著名的就是HTTP協(xié)議。通常我們把REST也寫作為REST/HTTP,在實際中往往把REST理解為基于HTTP的REST軟件架構(gòu),或者更進一步把REST和HTTP看作為等同的概念。今天,HTTP是互聯(lián)網(wǎng)上應(yīng)用最廣泛的計算機協(xié)議。HTTP不是一個簡單的運載數(shù)據(jù)的協(xié)議,而是一個具有豐富內(nèi)涵的網(wǎng)絡(luò)軟件的協(xié)議。它不僅僅能夠?qū)τ诨ヂ?lián)網(wǎng)資源進行唯一定位,而且還能告訴我們對于該資源進行怎樣運作。這也是REST軟件架構(gòu)當(dāng)中最重要的兩個理念。而REST軟件架構(gòu)理念是真正理解HTTP協(xié)議而形成的。有了REST軟件架構(gòu)理念出現(xiàn),才使得軟件業(yè)避免了對HTTP協(xié)議的片面理解。只有正確的理論指導(dǎo),才能避免在軟件開發(fā)的實際工作過程中少走彎路。87REST與URI(資源定位)REST軟件架構(gòu)之所以是一個超媒體系統(tǒng),是因為它可以把網(wǎng)絡(luò)上所有資源進行唯一的定位,不管你的文件是圖片、文件Word還是視頻文件,也不管你的文件是txt文件格式、xml文件格式還是其它文本文件格式。它利用支持HTTP的TCP/IP協(xié)議來確定互聯(lián)網(wǎng)上的資源。88REST與CRUD原則REST軟件架構(gòu)遵循了CRUD原則,該原則告訴我們對于資源(包括網(wǎng)絡(luò)資源)只需要四種行為:創(chuàng)建(Create)、獲?。≧ead)、更新(Update)和銷毀(DELETE)就可以完成對其操作和處理了。其實世界萬物都是遵循這一規(guī)律:生、見、變、滅。所以計算機世界也不例外。這個原則是源自于我們對于數(shù)據(jù)庫表的數(shù)據(jù)操作:insert(生)、select(見)、update(變)和delete(滅),所以有時候CRUD也寫作為RUDI,其中的I就是insert。這四個操作是一種原子操作,即一種無法再分的操作,通過它們可以構(gòu)造復(fù)雜的操作過程,正如數(shù)學(xué)上四則運算是數(shù)字的最基本的運算一樣。89REST與網(wǎng)絡(luò)服務(wù)盡管在Java語言世界中網(wǎng)絡(luò)服務(wù)目前是以SOAP技術(shù)為主,但是REST將是網(wǎng)絡(luò)服務(wù)的另一選擇,并且是真正意義上的網(wǎng)絡(luò)服務(wù)。基于REST思想的網(wǎng)絡(luò)服務(wù)不久的將來也會成為是網(wǎng)絡(luò)服務(wù)的主流技術(shù)。REST不僅僅把HTTP作為自己的數(shù)據(jù)運輸協(xié)議,而且也作為直接進行數(shù)據(jù)處理的工具。而當(dāng)前的網(wǎng)絡(luò)服務(wù)技術(shù)都需要使用其它手段來完成數(shù)據(jù)處理工作,它們完全獨立于HTTP協(xié)議來進行的,這樣增加了大量的復(fù)雜軟件架構(gòu)設(shè)計工作。REST的思想充分利用了現(xiàn)有的HTTP技術(shù)的網(wǎng)絡(luò)能力。在德國電視臺上曾經(jīng)出現(xiàn)過一個這樣的五十萬歐元智力題:如何實現(xiàn)網(wǎng)絡(luò)服務(wù)才能充分利用現(xiàn)有的HTTP協(xié)議?該問題給出了四個答案:去問微軟;WSDL2.0/SOAP1.2;WS-Transfer;根本沒有。這個問題告訴我們HTTP并不是一個簡單的數(shù)據(jù)傳來傳去的協(xié)議,而是一個聰明的會表現(xiàn)自己的協(xié)議,這也許是REST=RepresentationalStateTransfer的真正含義。實際上目前很多大公司已經(jīng)采用了REST技術(shù)作為網(wǎng)絡(luò)服務(wù),如Google、Amazon等。在Java語言中重要的兩個以SOAP技術(shù)開始的網(wǎng)絡(luò)服務(wù)框架XFire和Axis也把REST作為自己的另一種選擇。它們的新的項目分別是ApacheCXF和Axis2。Java語言也制定關(guān)于REST網(wǎng)絡(luò)服務(wù)規(guī)范:JAX-RS:JavaAPIforRESTfulWebServices(JSR311)。相信還會出現(xiàn)更多與REST相關(guān)的激動人心的信息。90REST與AJAX技術(shù)盡管AJAX技術(shù)的出現(xiàn)才不到兩年時間,但是AJAX技術(shù)遵循了REST的一些重要原則。AJAX技術(shù)充分利用了HTTP來獲取網(wǎng)絡(luò)資源并且實現(xiàn)了HTTP沒有的對于異步數(shù)據(jù)進行傳輸?shù)墓δ?。AJAX技術(shù)還使得軟件更好地實現(xiàn)分布性功能,在一個企業(yè)內(nèi)只要一個人下載了AJAX引擎,其它企業(yè)內(nèi)部的人員,就可以共享該資源了。AJAX技術(shù)遵守REST準(zhǔn)則的應(yīng)用程序中簡單和可伸縮的架構(gòu),凡是采用AJAX技術(shù)的頁面簡潔而又豐富,一個頁面表現(xiàn)了豐富多彩的形態(tài)。AJAX技術(shù)還使用了一種不同于XML格式的JSON文件格式,這個意義在哪里呢?在REST軟件架構(gòu)下我們不能對于XML文件進行序列化處理,這樣程序員必須要使用自己的XML綁定框架。而以序列化的JavaScript對象為基礎(chǔ)的JSON已經(jīng)獲得了廣泛認可,它被認為能以遠比XML更好的方式來序列化和傳輸簡單數(shù)據(jù)結(jié)構(gòu),而且它更簡潔。這對REST是一個極大貢獻和補充。當(dāng)前的網(wǎng)絡(luò)應(yīng)用軟件還違背了REST的“無狀態(tài)服務(wù)器”約束。REST服務(wù)器只知道自己的狀態(tài)。REST不關(guān)心客戶端的狀態(tài),客戶端的狀態(tài)自己來管理,這是AJAX技術(shù)的應(yīng)用之地。通過AJAX技術(shù),可以發(fā)揮有狀態(tài)網(wǎng)絡(luò)客戶機的優(yōu)勢。而REST的服務(wù)器關(guān)心的是從所有網(wǎng)絡(luò)客戶端發(fā)送到服務(wù)器操作的順序。這樣使得互聯(lián)網(wǎng)這樣一個巨大的網(wǎng)絡(luò)得到有序的管理。91REST與Rails框架

RubyonRails框架(簡稱Rails或者Rails框架)是一個基于Ruby語言的越來越流行的網(wǎng)絡(luò)應(yīng)用軟件開發(fā)框架。它提供了關(guān)于REST最好的支持,也是當(dāng)今應(yīng)用REST最成功的一個軟件開發(fā)框架。Rails框架(從版本1.2.x起)成為了第一個引入REST作為核心思想的主流網(wǎng)絡(luò)軟件開發(fā)框架。在Rails框架的充分利用了REST軟件架構(gòu)之后,人們更加堅信REST的重要性和必要性。Rails利用REST軟件架構(gòu)思想對網(wǎng)絡(luò)服務(wù)也提供了一流的支持。從最直觀的角度看待REST,它是網(wǎng)絡(luò)服務(wù)最理想的手段,但是Rails框架把REST帶到了網(wǎng)絡(luò)應(yīng)用軟件開發(fā)框架。這是一次飛躍,讓REST的思想從網(wǎng)絡(luò)服務(wù)的應(yīng)用提升到了網(wǎng)絡(luò)應(yīng)用軟件開發(fā)。利用REST思想的simply_restful插件已經(jīng)成為了Rails框架的核心內(nèi)容。92REST安全性

我們把現(xiàn)有基于SOAP的網(wǎng)絡(luò)服務(wù)和基于REST/HTTP網(wǎng)絡(luò)服務(wù)作個比喻,前者是一種傳統(tǒng)的寄信方式,而后者是現(xiàn)代網(wǎng)絡(luò)的電子郵件方式。要是是寄信和電子郵件都有病毒存在的話,傳統(tǒng)的寄信被送到對方就很危險,而電子郵件是開發(fā)的,電子郵件供應(yīng)商比如Google為我們檢查了電子郵件是否有病毒。這里并不是說明SOAP網(wǎng)絡(luò)服務(wù)消息包含義病毒,而是說明HTTP是無法處理SOAP信息包究竟好不好,需要額外的軟件工具解決這一問題,包括防火墻也用不上和管不了。REST/HTTP網(wǎng)絡(luò)服務(wù)的信息包可以被防火墻理解和控制。你可以按照操作和鏈接進行過濾信息包,如你可以規(guī)定從外部來的只能讀?。℅ET操作)自己服務(wù)器的資源。這樣對于系統(tǒng)管理員而言使得軟件管理更為簡單。REST的安全性還可以利用傳輸安全協(xié)議SSL/TLS、基本和摘要式認證(BasicundDigestAuthentication)。除了這些REST自身的安全性功能外,還可以利用像基于信息的WebServicesSecurity(JSR155)作為REST不錯的補充。93參考文獻中文參考文獻

RoyThomasFielding博士論文中文版本

RoyThomasFielding博士論文英文版本

94RSSRSS是在線共享內(nèi)容的一種簡易方式(也叫聚合內(nèi)容,ReallySimpleSyndication)。通常在時效性比較強的內(nèi)容上使用RSS訂閱能更快速獲取信息,網(wǎng)站提供RSS輸出,有利于讓用戶獲取網(wǎng)站內(nèi)容的最新更新。網(wǎng)絡(luò)用戶可以在客戶端借助于支持RSS的聚合工具軟件(例如SharpReader,NewzCrawler、FeedDemon),在不打開網(wǎng)站內(nèi)容頁面的情況下閱讀支持RSS輸出的網(wǎng)站內(nèi)容。說得更加簡單一點,RSS就是一種用來分發(fā)和匯集網(wǎng)頁內(nèi)容的XML格式!如果你還是不太明白,沒有關(guān)系,RSS是什么其實并不重要,重要的是RSS可以做什么,下面我們就來了解一下,RSS能給我們帶來什么?95RSS可以干什么1.訂閱BLOG(你可以訂閱你工作中所需的技術(shù)文章;也可以訂閱與你有共同愛好的作者的Blog,總之,你對什么感興趣你就可以訂什么)

2.訂閱新聞(無論是奇聞怪事、明星消息、體壇風(fēng)云,只要你想知道的,都可以訂閱)

你再也不用一個網(wǎng)站一個網(wǎng)站,一個網(wǎng)頁一個網(wǎng)頁去逛了。只要這將你需要的內(nèi)容訂閱在一個RSS閱讀器中,這些內(nèi)容就會自動出現(xiàn)你的閱讀器里,你也不必為了一個急切想知道的消息而不斷的刷新網(wǎng)頁,因為一旦有了更新,RSS閱讀器就會自己通知你!96RSS閱讀器目前,RSS閱讀器基本可以分為兩類。

第一類大多數(shù)閱讀器是運行在計算機桌面上的應(yīng)用程序,通過所訂閱網(wǎng)站的新聞供應(yīng),可自動、定時地更新新聞標(biāo)題。在該類閱讀器中,有Awasu、FeedDemon和RSSReader這三款流行的閱讀器,都提供免費試用版和付費高級版。國內(nèi)最近也推出了幾款RSS閱讀器:周博通,看天下,博閱。另外,開源社區(qū)也推出了很多優(yōu)秀的閱讀器,RSSOWl(完全java開發(fā),點擊下載)它不僅是完全支持中文界面,而且還是完全的免費軟件!(后面我們就將以開源軟件周博通和rssowl為例,為大家介紹怎樣來使用RSS閱讀器-周伯通,怎樣使用RSS閱讀器-rssowl))

第二類新聞閱讀器通常是內(nèi)嵌于已在計算機中運行的應(yīng)用程序中。例如,NewsGator內(nèi)嵌在微軟的Outlook中,所訂閱的新聞標(biāo)題位于Outlook的收件箱文件夾中。另外,Pluck內(nèi)嵌在InternetExplorer瀏覽器中!

另外,F(xiàn)ireFox瀏覽器內(nèi)置對RSS支持,可以使用Firefox訂閱RSS哦。97RSS的聯(lián)合(Syndication)和聚合(Aggregation)發(fā)布一個RSS文件(RSSFeed)后,這個RSSFeed中包含的信息就能直接被其他站點調(diào)用,而且由于這些數(shù)據(jù)都是標(biāo)準(zhǔn)的XML格式,所以也能在其他的終端和服務(wù)中使用,如PDA、手機、郵件列表等。而且一個網(wǎng)站聯(lián)盟(比如專門討論旅游的網(wǎng)站系列)也能通過互相調(diào)用彼此的RSSFeed,自動的顯示網(wǎng)站聯(lián)盟中其他站點上的最新信息,這就叫著RSS的聯(lián)合。這種聯(lián)合就導(dǎo)致一個站點的內(nèi)容更新越及時、RSSFeed被調(diào)用的越多,該站點的知名度就會越高,從而形成一種良性循環(huán)。

而所謂RSS聚合,就是通過軟件工具的方法從網(wǎng)絡(luò)上搜集各種RSSFeed并在一個界面中提供給讀者進行閱讀。這些軟件可以是在線的WEB工具,如,,,,等,當(dāng)然,可以使用我們以上提到的客戶端工具。98RSS的未來發(fā)展隨著越來越多的站點對RSS的支持,RSS已經(jīng)成為目前最成功的XML應(yīng)用。RSS搭建了信息迅速傳播的一個技術(shù)平臺,使得每個人都成為潛在的信息提供者。相信很快我們就會看到大量基于RSS的專業(yè)門戶、聚合站點和更精確的搜索引擎。99常見RSS訂閱工具BitsCastRSSNewsReader/Podcaster

onelurv

BOKEE

GreatNews

HEXUNRSSREADER和訊博攬

iSpaceDesktop

Liferea

NewsFire

NetNewsWire

Plazoo

RSSBandit

RSSOwl

RSSReader

SharpReader

Straw

Vienna

百博

新浪點點通閱讀器100參考文獻1、RSS0.9Specification2、RSS1.0Specification3、RSS2.0Specification101ATOMATOM是一種訂閱網(wǎng)志的格式。它與RSS相比來講,有更大的彈性。

atom是一種基于XML的文檔格式以及基于HTTP的協(xié)議,它被站點和客戶工具等用來聚合網(wǎng)絡(luò)內(nèi)容,包括weblog和新聞標(biāo)題等,它借鑒了各種版本RSS的使用經(jīng)驗

Atom正走在通往IETF標(biāo)準(zhǔn)的路上,在這之前,Atom的最后一個版本是"Atom0.3",并且已經(jīng)被相當(dāng)廣泛的聚合工具使用在發(fā)布和使用(consuming)上。值得一提的是,Blogger和Gmail這兩個由Google提供的服務(wù)正在使用Atom.102開放API以前的開放API(應(yīng)用程序接口)主要指桌面應(yīng)用軟件,希望通過開放API融合更多的應(yīng)用。在WEB1.0時代只有少數(shù)網(wǎng)站,比如EBAY,亞馬遜公司(Amazon)、雅虎公司、Google公司等,在設(shè)計之初就遵循各種工業(yè)化標(biāo)準(zhǔn),進而開放API接口,正是由于這些開放的API,他們獲得了不少有趣、有意思的應(yīng)用。但大多數(shù)公司當(dāng)時還沒有這種意識,不過在Web2.0時代,開放API已經(jīng)成為不可忽視的趨勢。

對于公司來說,技術(shù)領(lǐng)域的競爭已經(jīng)演化為標(biāo)準(zhǔn)之爭,標(biāo)準(zhǔn)的形成在于有多少人在使用,因此開放API就意味更多的人采用,也就意味著標(biāo)準(zhǔn)。Google公司顯然深諳此道。它所推出的諸多產(chǎn)品都是基于開放的API標(biāo)準(zhǔn)。最典型的例子就是Googlemap,開放GoogleMap的API后,Google公司無需花費力氣做更多的市場推廣,其他公司就會主動地整合它的應(yīng)用。如前文我們提到的美國房地產(chǎn)交易地圖網(wǎng)就是在其網(wǎng)站中主動整合GoogleMap。正是看到開放后的巨大前景,微軟、雅虎、Skype也紛紛加入其中。

103AJAXAJAX的全稱是AsynchronousJavaScriptandXML,它不是一種技術(shù)而是數(shù)種技術(shù)的組合。AJAX采用遠程腳本調(diào)用技術(shù),通過JavaScript語言與XMLHttpRequest對象來實現(xiàn)數(shù)據(jù)請求,將處理由服務(wù)器轉(zhuǎn)移到客戶端,減少了服務(wù)器的資源占用,加快了數(shù)據(jù)處理的速度。采用AJAX開發(fā)的軟件能讓你在使用網(wǎng)絡(luò)應(yīng)用軟件時感覺就象在本機上一樣。

目前AJAX技術(shù)已經(jīng)廣泛應(yīng)用于網(wǎng)絡(luò)應(yīng)用軟件開發(fā)中,Google也許是AJAX技術(shù)開發(fā)投入最大收獲最多的公司,AJAX已經(jīng)成功應(yīng)用于GMail、GoogleSuggest和GoogleMaps等網(wǎng)絡(luò)應(yīng)用軟件中。

除了Google以外還有更多的公司在采用AJAX。在AJAX的幫助下Zimbra公司開發(fā)的電子郵件中,比GMail和HotMail更加互動。M公司也在即時通訊軟件中采用AJAX技術(shù),以創(chuàng)造更好的用戶體驗。即使微軟也不能阻擋AJAX的魅力,微軟聲稱將在下一代HotMail中加入AJAX工具條。104Ajax工具和技術(shù)綜述Ajax(AsynchronousJavaScript+XML)編程技術(shù)正逐漸主導(dǎo)Web應(yīng)用程序開發(fā)領(lǐng)域。每天都有新的開發(fā)人員步入Ajax開發(fā)的殿堂,他們擁有不同的開發(fā)背景。本系列的第1部分將提供來自IBM?Ajax開發(fā)人員專家組的Ajax開發(fā)資源備忘單。作者根據(jù)他們自己的ramp-up經(jīng)驗為您提供了一些實用的信息,這些信息可以幫助您快速進入高效Ajax開發(fā)的軌道。Ajax是一種Web應(yīng)用程序客戶機技術(shù),它結(jié)合了JavaScript、層疊樣式表(CascadingStyleSheets,CSS)、HTML、XMLHttpRequest對象和文檔對象模型(DocumentObjectModel,DOM),關(guān)于各種標(biāo)準(zhǔn)的更多信息,請參閱參考資料。運行在瀏覽器上的Ajax應(yīng)用程序以一種異步的方式與Web服務(wù)器通信,并且只更新頁面的一部分。通過利用Ajax技術(shù),可以提供豐富的、基于瀏覽器的用戶體驗。在開始Ajax之旅以前,需要熟悉很多不同的語言、標(biāo)準(zhǔn)、工具和庫。一開始就要在不同選項之間做出選擇并組合出一個開發(fā)環(huán)境來可能有些勉為其難。作者將根據(jù)他們自己的ramp-up(項目初始階段的準(zhǔn)備工作)經(jīng)驗幫助您在旅途中避免可能遇到的一些比較常見的、令人厭煩的問題。105Ajax工具和技術(shù)綜述Ajax將改變用戶在網(wǎng)站上的體驗,之前的單擊-顯示頁面式的體驗將變成具有交互性、靈活性的桌面應(yīng)用程序體驗。用戶可以避免頁面重新加載,避免等待下一部分內(nèi)容的呈現(xiàn)。您可能在想,這一切聽起來是不錯,但是如何才能做得到呢?為了回答這個問題,先來看看Ajax技術(shù)背后的一些幕后故事。Ajax是以下Web技術(shù)和標(biāo)準(zhǔn)的集合,它允許使用客戶端的機器在背后運行應(yīng)用程序邏輯的重要部分,而不僅僅是呈現(xiàn)應(yīng)用程序的輸出:超文本標(biāo)記語言(HypertextMarkupLanguage,HTML):定義最終呈現(xiàn)給用戶的內(nèi)容。層疊樣式表(CascadingStyleSheets,CSS):定義所呈現(xiàn)內(nèi)容的樣式(或裝飾)。文檔對象模型(DocumentObjectModel,DOM):一種API,瀏覽器使用它將被呈現(xiàn)內(nèi)容公開給JavaScript腳本。然后,腳本可以使用DOM在用戶看到內(nèi)容之前動態(tài)地修改內(nèi)容。XmlHttpRequest對象:為瀏覽器與服務(wù)器之間的交互提供便利,通過JavaScript腳本調(diào)用。JavaScript:在瀏覽器中執(zhí)行的一種編程語言,將所有其他的Ajax組成部分黏合在一起。腳本可以偵聽瀏覽器中發(fā)生的事件(例如單擊一個按鈕),并使用XmlHttpRequests回調(diào)服務(wù)器以對事件作出反應(yīng),然后根據(jù)返回的結(jié)果修改DOM樹。所有這些技術(shù)都在用戶的Web瀏覽器中執(zhí)行,用戶的Web瀏覽器充當(dāng)執(zhí)行Ajax程序的平臺。106Ajax工具和技術(shù)綜述如果要使用Ajax,那么有一點值得格外注意:組成它的技術(shù)雖然是基于標(biāo)準(zhǔn)的,但又是特定于瀏覽器的。換句話說,同一個應(yīng)用程序在不同的瀏覽器上可能表現(xiàn)出不同的行為。然而,由于既不可能限制用戶使用特定的瀏覽器,又不可能忽略客戶機的瀏覽器可能不支持CSS或DOM這一事實,因此,作為應(yīng)用程序的創(chuàng)建者,您需要理解各種不同瀏覽器之間的差異。要成為一名高效的Ajax開發(fā)人員,需要:了解形成Ajax開發(fā)基礎(chǔ)的技術(shù)。理解可用的運行時平臺和Web瀏覽器。開發(fā)Ajax應(yīng)用程序時使用支持各種語言的IDE。擁有用于各種環(huán)境和語言的調(diào)試器和應(yīng)用程序測試工具。107信息源developerWorks上由BrettMcLaughlin撰寫的掌握Ajax

系列是最好的Ajax教程之一。該系列不要求預(yù)先知道多少Ajax編程知識,并且描述了各種與Ajax相關(guān)的技術(shù)。如果您想更好地理解Web架構(gòu),那么可能需要對RepresentationalStateTransfer(REST)有所熟悉?!癏owtoCreateaRESTProtocol”(請參閱參考資料)這篇文章可以作為這一方面很好的入門資料。閱讀完掌握Ajax

系列,并且親自開始一些開發(fā)之后,您還將需要一些其他的參考信息。W3Schools(請參閱參考資料)提供了核心Ajax技術(shù)(JavaScript、CSS、HTML、DOM、XML等)的在線參考信息。如果您使用的是MozillaFirefox瀏覽器,那么應(yīng)該使用DevEdge側(cè)欄(請參閱參考資料)。這些側(cè)欄包含各種Ajax技術(shù)標(biāo)準(zhǔn)的索引,您可以使用它們作為參考指南。最后,如果您想到Ajax社區(qū)去感受一下,那么應(yīng)該訂閱Ajaxian博客(請參閱參考資料)。108瀏覽器作為運行時環(huán)境Web瀏覽器不僅是Ajax部署環(huán)境,同時還是調(diào)試環(huán)境。大多數(shù)瀏覽器都可以添加調(diào)試輔助工具,例如DOM樹查看器或調(diào)試器。文章下節(jié)將對以下各種流行的瀏覽器作一個概述:Microsoft?InternetExplorer(IE)FirefoxSafari109InternetExplorerIE一直是大多數(shù)用戶的選擇。IE6是一款成熟的瀏覽器,具有非常深的市場底蘊。很多CSS和DOM特性在IE6中不受支持,或者以一種專用的形式提供。使用IE6的開發(fā)人員可能會遇到以下一些問題:緩慢的JavaScript解釋器和不一致的標(biāo)準(zhǔn)實現(xiàn)。缺少透明的PNG支持。DOM事件:一個事件可能在Firefox中使用一個名稱,而在IE中又使用另一個名稱。有些事件的調(diào)用順序不一樣,在IE中和在Firefox中相同的事件對象可能具有不同的屬性。有關(guān)這一問題的更多信息,請閱讀“把應(yīng)用程序從InternetExplorer遷移到Mozilla”(請參閱參考資料)。未實現(xiàn)的CSS屬性,例如minimum/maximumheight、selectors等等。盡管存在這些問題,您還是應(yīng)該相信大多數(shù)用戶都是使用這個瀏覽器。也可以試著使用各種不同的庫從而在一定程度上填補IE6的不足,例如/IE7/(請參閱參考資料)。IE7在IE6的基礎(chǔ)上有了很多明顯的改進,例如對標(biāo)簽的支持。對于開發(fā)人員而言,隱藏的改進更為重要。IE7提供了一個性能更佳的JavaScript解釋器,并修復(fù)了IE6中的很多缺陷(例如CSS),使得最遵從標(biāo)準(zhǔn)的Ajax應(yīng)用程序只需要少量的修改便可以在該瀏覽器上運行。110IE調(diào)試輔助工具可以使用以下工具在IE中調(diào)試應(yīng)用程序:IEDeveloperToolbar:允許更好地控制IE環(huán)境(緩存,cookie),瀏覽DOM樹,以及瀏覽和操縱元素的樣式。在分析由應(yīng)用程序生成的頁面時,這是非常有用的工具。(IEDeveloperToolbar可以從Microsoft下載。參考資料中提供了下載鏈接。)MicrosoftScriptDebugger:隨MicrosoftOffice(可以從Microsoft下載,請參閱參考資料)一起發(fā)布,通過它可以在JavaScript代碼中設(shè)置斷點,觀察變量,還可以執(zhí)行常規(guī)的調(diào)試例程。注意,在調(diào)試時,建議在每個調(diào)試會話之前通過IEDeveloperToolbar禁用緩存,否則后面會調(diào)試緩存版本的代碼。111IE調(diào)試輔助工具IE相關(guān)瀏覽器可以使用Trident(IE瀏覽器引擎)創(chuàng)建“新”的瀏覽器,例如Maxthon。這里新字打上了引號,因為從開發(fā)人員的角度來看,瀏覽器的關(guān)鍵特(例如對Ajax的支持)仍然相同。(請參閱參考資料了解更多關(guān)于Trident的知識。)112MozillaFirefox雖然Firefox已經(jīng)出來好幾個版本,但是這里只討論Firefox2.0。開發(fā)人員和超級用戶常常使用Firefox,它是UNIX?-類操作系統(tǒng)的首選,而且是開放源碼的,除了IE之外,它是最流行的瀏覽器。Firefox有一個速度很快的JavaScript解釋器,并且具有各種Web標(biāo)準(zhǔn)的優(yōu)異的實現(xiàn)。由于它的Ajax友好性,我們強烈建議將Firefox用于大多數(shù)Ajax開發(fā)。通常,很多Ajax開發(fā)人員都是在Firefox上開始應(yīng)用程序開發(fā)的,然后才轉(zhuǎn)而使用其它瀏覽器。113Firefox調(diào)試輔助工具Firefox具有一個強大的、開放的擴展機制,它的社區(qū)借助這種機制創(chuàng)建了大量的Web開發(fā)輔助工具。然而,到目前為止,F(xiàn)irebug(請參閱參考資料)是其中最為流行的。(要了解關(guān)于Firebug功能的更多細節(jié),請參閱“AjaxDebuggingwithFirebug”)。Firebug是一個集成的擴展,通過它可以:使用斷點、變量查看和逐步方式來調(diào)試JavaScript代碼。查看網(wǎng)絡(luò)狀況。查看和優(yōu)化各種不同元素的DOM樹和CSS。Firebug1.0的強大性和靈活性為Ajax開發(fā)樹立了里程碑,也是使用Firefox作為首選開發(fā)瀏覽器的有力的理由。Firefox相關(guān)的瀏覽器一些瀏覽器,例如Camino,使用了Firefox的布局引擎MozillaGecko(請參閱參考資料)。這些瀏覽器通過一個匹配的Gecko版本能夠提供與Firefox相同的功能。114SafariSafari是隨MacOSX一起發(fā)布的瀏覽器(從第3版開始,也在Windows?上運行。)Safari雖然比Firefox和IE7快很多,但是缺少對標(biāo)準(zhǔn)的支持(不過最新的WebKit構(gòu)建有了一些改進;文章下節(jié)將會更詳細地介紹WebKit)。還應(yīng)注意,Safari開發(fā)人員社區(qū)規(guī)模遠遠小于Firefox和IE的開發(fā)人員社區(qū)。因此,網(wǎng)上關(guān)于Safari的信息較少,而且很多庫都沒有在Safari上經(jīng)過良好的測試。115Safari調(diào)試輔助工具Safari瀏覽器引擎是在一個名為WebKit的開放源碼項目(請參閱參考資料)中開發(fā)的。為了在Safari中調(diào)試應(yīng)用程序,建議使用一個WebKit構(gòu)建。該構(gòu)建包括:經(jīng)過定制的帶有CSS和DOM查看器的瀏覽器。Drosera:一個JavaScript調(diào)試器。Drosera可用于調(diào)試應(yīng)用程序,但是與Firebug相比其特性比較有限。如果您堅持在Safari中測試應(yīng)用程序,那么可以打開SafariDebug菜單,通過該菜單可以查看DOM樹、CSS和緩存等。116Safari相關(guān)的瀏覽器WebKit應(yīng)用于很多瀏覽器,其中最引入注目的是OmniWeb。AjaxIDE和工具在開發(fā)新的Ajax應(yīng)用程序時,如果所使用的IDE支持所有Ajax相關(guān)技術(shù)并且提供快捷、友好的開發(fā)環(huán)境和UI將會使您如虎添翼。在選擇一款A(yù)jaxIDE時,需要考慮以下一些特性:具有自動完成、顏色突出顯示、錯誤提示等功能的語法制導(dǎo)編輯功能(用于HTML、CSS、JavaScript和DOM)各種技術(shù)的相關(guān)文檔集成的JavaScript調(diào)試器網(wǎng)絡(luò)監(jiān)控功能DOM內(nèi)省框架集成雖然您可能會考慮購買一個IDE,但其實Eclipse和它的相關(guān)插件就提供了一個功能完善的、基于開放源碼的AjaxIDE,這個IDE可以免費下載。本節(jié)將討論以下這些基于Eclipse的、包括插件的AjaxIDE:含Web工具箱(toolkit)的EclipseEclipseATFAptana117含有Web工具箱的Eclipse如果您是一名Java?開發(fā)人員,負責(zé)服務(wù)器端的Java開發(fā),那么使用EclipseWeb工具箱也是開始基本Ajax開發(fā)的簡單易行的方法。通過添加Eclipse的Web工具(請參閱參考資料),可以獲得一個可用于開發(fā)Web工件的基本環(huán)境,還可以獲得可編輯HTML、CSS和JavaScript文件的編輯器和編輯工具。注意,EclipseWeb工具環(huán)境不限于Ajax開發(fā),它還支持側(cè)重于服務(wù)器端的Web應(yīng)用程序開發(fā)。因此,它提供了諸如語法突出顯示和基本代碼完成之類的核心功能。它并未提供特定于Ajax開發(fā)任務(wù)的調(diào)試功能或DOM操縱功能。118EclipseATF您可以安裝EclipseAjaxToolkitFramework(ATF)環(huán)境(請參閱參考資料),并將其與EclipseWeb工具箱相結(jié)合,從而產(chǎn)生一個強大的、支持Ajax開發(fā)需求所有方面的環(huán)境。ATF提供了以下特性:一個DOM瀏覽器和CSS運行時編輯器一個JavaScript調(diào)試器(通過利用MozillaXUL運行程序)網(wǎng)絡(luò)流量監(jiān)控通過庫配置文件實現(xiàn)常用庫的簡單庫集成與JSLint(請參閱參考資料)的集成,以執(zhí)行JavaScript驗證該工具箱中一個非常有價值的特性是在集成的XUL運行程序中運行、測試和檢查應(yīng)用程序。119SOAandWebservices面向服務(wù)的體系結(jié)構(gòu)(Service-OrientedArchite

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論