概述在網路編程中,有時我們需要判斷兩台機器之間的連通性,或者說是一台機器到另一台機器的網路可達性。在系統層面的測試中,我們常常用 Ping 命令來做驗證。盡管 Java 提供了比較豐富的網路編程類庫(包括在應用層的基於 URL 的網路資源讀取,基於 TCP/IP 層的 Socket 編程,以及一些輔助的類庫),但是沒有直接提供類似 Ping 命令來測試網路連通性的方法。本文將介紹如何通過 Java 已有的 API,編程實現各種場景下兩台機器之間的網路可達性判斷。在下面的章節中,我們會使用 Java 網路編程的一些類庫 java.net.InetAddress 和 java.net.Socket,通過例子解釋如何模擬 Ping 命令。回頁首簡單判斷兩台機器的可達性一般情況下,我們僅僅需要判斷從一台機器是否可以訪問(Ping)到另一台機器,此時,可以簡單的使用 Java 類庫中 java.net.InetAddress 類來實現,這個類提供了兩個方法探測遠程機器是否可達 �0�2boolean isReachable(int�0�2timeout) //�0�2測試地址是否可達�0�2boolean isReachable(NetworkInterface�0�2netif, int�0�2ttl, int�0�2timeout) //�0�2測試地址是否可達. 簡單說來,上述方法就是通過遠端機器的 IP 地址構造 InetAddress 對象,然後調用其 isReachable 方法,測試調用機器和遠端機器的網路可達性。注意到遠端機器可能有多個 IP 地址,因而可能要迭代的測試所有的情況。清單1:簡單判斷兩台機器的可達性 void isAddressAvailable(String ip){ try{ InetAddress address = InetAddress.getByName(ip);//ping this IP if(address instanceof java.net.Inet4Address){ System.out.println(ip + " is ipv4 address"); }else if(address instanceof java.net.Inet6Address){ System.out.println(ip + " is ipv6 address"); }else{ System.out.println(ip + " is unrecongized"); } if(address.isReachable(5000)){ System.out.println("SUCCESS - ping " + IP + " with no interface specified"); }else{ System.out.println("FAILURE - ping " + IP + " with no interface specified"); } System.out.println("\n-------Trying different interfaces--------\n"); Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); while(netInterfaces.hasMoreElements()) { NetworkInterface ni = netInterfaces.nextElement(); System.out.println( "Checking interface, DisplayName:" + ni.getDisplayName() + ", Name:" + ni.getName()); if(address.isReachable(ni, 0, 5000)){ System.out.println("SUCCESS - ping " + ip); }else{ System.out.println("FAILURE - ping " + ip); } Enumeration<InetAddress> ips = ni.getInetAddresses(); while(ips.hasMoreElements()) { System.out.println("IP: " + ips.nextElement().getHostAddress()); } System.out.println("-------------------------------------------"); } }catch(Exception e){ System.out.println("error occurs."); e.printStackTrace(); } } 程序輸出 --------------START-------------- 10.13.20.70 is ipv4 address SUCCESS - ping 10.13.20.70 with no interface specified -------Trying different interfaces-------- Checking interface, DisplayName:MS TCP Loopback interface, Name:lo FAILURE - ping 10.13.20.70 IP: 127.0.0.1 ------------------------------------------- Checking interface, DisplayName:Intel(R) Centrino(R) Advanced-N 6200 AGN - Teefer2 Miniport, Name:eth0 FAILURE - ping 10.13.20.70 IP: 9.123.231.40 ------------------------------------------- Checking interface, DisplayName:Intel(R) 82577LM Gigabit Network Connection - Teefer2 Miniport, Name:eth1 SUCCESS - ping 10.13.20.70 ------------------------------------------- Checking interface, DisplayName:WAN (PPP/SLIP) Interface, Name:ppp0 SUCCESS - ping 10.13.20.70 IP: 10.0.50.189 ------------------------------------------- --------------END-------------- 從上可以看出 isReachable 的用法,可以不指定任何介面來判斷遠端網路的可達性,但這不能區分出數據包是從那個網路介面發出去的 ( 如果本地有多個網路介面的話 );而高級版本的 isReachable 則可以指定從本地的哪個網路介面測試,這樣可以准確的知道遠端網路可以連通本地的哪個網路介面。但是,Java 本身沒有提供任何方法來判斷本地的哪個 IP 地址可以連通遠端網路,Java 網路編程介面也沒有提供方法來訪問 ICMP 協議數據包,因而通過 ICMP 的網路不可達數據包實現這一點也是不可能的 ( 當然可以用 JNI 來實現,但就和系統平台相關了 ), 此時可以考慮本文下一節提出的方法。回頁首指定本地和遠程網路地址,判斷兩台機器之間的可達性在某些情況下,我們可能要確定本地的哪個網路地址可以連通遠程網路,以便遠程網路可以回連到本地使用某些服務或發出某些通知。一個典型的應用場景是,本地啟動了文件傳輸服務 ( 如 FTP),需要將本地的某個 IP 地址發送到遠端機器,以便遠端機器可以通過該地址下載文件;或者遠端機器提供某些服務,在某些事件發生時通知注冊了獲取這些事件的機器 ( 常見於系統管理領域 ),因而在注冊時需要提供本地的某個可達 ( 從遠端 ) 地址。雖然我們可以用 InetAddress.isReachabl 方法判斷出本地的哪個網路介面可連通遠程玩過,但是由於單個網路介面是可以配置多個 IP 地址的,因而在此並不合適。我們可以使用 Socket 建立可能的 TCP 連接,進而判斷某個本地 IP 地址是否可達遠程網路。我們使用 java.net.Socket 類中的 connect 方法 void connect(SocketAddress�0�2endpoint, int�0�2timeout) �0�2//使用Socket連接伺服器,指定超時的時間 這種方法需要遠程的某個埠,該埠可以是任何基於 TCP 協議的開放服務的埠(如一般都會開放的 ECHO 服務埠 7, Linux 的 SSH 服務埠 22 等)。實際上,建立的 TCP 連接被協議棧放置在連接隊列,進而分發到真正處理數據的各個應用服務,由於 UDP 沒有連接的過程,因而基於 UDP 的服務(如 SNMP)無法在此方法中應用。具體過程是,枚舉本地的每個網路地址,建立本地 Socket,在某個埠上嘗試連接遠程地址,如果可以連接上,則說明該本地地址可達遠程網路。程序清單 2:指定本地地址和遠程地址,判斷兩台機器之間的可達性 void printReachableIP(InetAddress remoteAddr, int port){ String retIP = null; Enumeration<NetworkInterface> netInterfaces; try{ netInterfaces = NetworkInterface.getNetworkInterfaces(); while(netInterfaces.hasMoreElements()) { NetworkInterface ni = netInterfaces.nextElement(); Enumeration<InetAddress> localAddrs = ni.getInetAddresses(); while(localAddrs.hasMoreElements()){ InetAddress localAddr = localAddrs.nextElement(); if(isReachable(localAddr, remoteAddr, port, 5000)){ retIP = localAddr.getHostAddress(); break; } } } } catch(SocketException e) { System.out.println( "Error occurred while listing all the local network addresses."); } if(retIP == null){ System.out.println("NULL reachable local IP is found!"); }else{ System.out.println("Reachable local IP is found, it is " + retIP); } } boolean isReachable(InetAddress localInetAddr, InetAddress remoteInetAddr, int port, int timeout) { booleanisReachable = false; Socket socket = null; try{ socket = newSocket(); // 埠號設置為 0 表示在本地挑選一個可用埠進行連接 SocketAddress localSocketAddr = new InetSocketAddress(localInetAddr, 0); socket.bind(localSocketAddr); InetSocketAddress endpointSocketAddr = new InetSocketAddress(remoteInetAddr, port); socket.connect(endpointSocketAddr, timeout); System.out.println("SUCCESS - connection established! Local: " + localInetAddr.getHostAddress() + " remote: " + remoteInetAddr.getHostAddress() + " port" + port); isReachable = true; } catch(IOException e) { System.out.println("FAILRE - CAN not connect! Local: " + localInetAddr.getHostAddress() + " remote: " + remoteInetAddr.getHostAddress() + " port" + port); } finally{ if(socket != null) { try{ socket.close(); } catch(IOException e) { System.out.println("Error occurred while closing socket.."); } } } return isReachable; } 運行結果 --------------START-------------- FAILRE - CAN not connect! Local: 127.0.0.1 remote: 10.8.1.50 port22 FAILRE - CAN not connect! Local: 9.123.231.40 remote: 10.8.1.50 port22 SUCCESS - connection established! Local: 10.0.50.189 remote: 10.8.1.50 port22 Reachable local IP is found, it is 10.0.50.189 --------------END-------------- 回頁首IPv4 和 IPv6 混合網路下編程當網路環境中存在 IPv4 和 IPv6,即機器既有 IPv4 地址,又有 IPv6 地址的時候,我們可以對程序進行一些優化,比如 由於IPv4 和 IPv6 地址之間是無法互相訪問的,因此僅需要判斷 IPv4 地址之間和 IPv6 地址之間的可達性。 對於IPv4 的換回地址可以不做判斷,對於 IPv6 的 Linklocal 地址也可以跳過測試 根據實際的需要,我們可以優先考慮選擇使用 IPv4 或者 IPv6,提高判斷的效率程序清單 3: 判斷本地地址和遠程地址是否同為 IPv4 或者 IPv6 // 判斷是 IPv4 還是 IPv6 if(!((localInetAddr instanceofInet4Address) && (remoteInetAddr instanceofInet4Address) || (localInetAddr instanceofInet6Address) && (remoteInetAddr instanceofInet6Address))){ // 本地和遠程不是同時是 IPv4 或者 IPv6,跳過這種情況,不作檢測 break; } 程序清單 4:跳過本地地址和 LinkLocal 地址 if( localAddr.isLoopbackAddress() || localAddr.isAnyLocalAddress() || localAddr.isLinkLocalAddress() ){ // 地址為本地環回地址,跳過 break; } 回頁首總結和展望本文列舉集中典型的場景,介紹了通過 Java 網路編程介面判斷機器之間可達性的幾種方式。在實際應用中,可以根據不同的需要選擇相應的方法稍加修改即可。對於更加特殊的需求,還可以考慮通過 JNI 的方法直接調用系統 API 來實現,能提供更加強大和靈活的功能,這里就不再贅述了。參考資料 學習 參考developerWorks 的文章 Java 應用程序的網路運行環境編程,獲取更多網路編程相關的信息。 如果要通過 JNI 進行網路編程,可以參考 developerWorks 上的文章 用JNI 進行 Java 編程,了解更多 JNI 相關的信息和例子。 參考Javadoc 獲取更多關於 Java 網路編程的 API 的信息。 developerWorks Java 技術專區:這里有數百篇關於 Java 編程各個方面的文章。 討論加入developerWorks 中文社區。查看開發人員推動的博客、論壇、組和維基,並與其他 developerWorks 用戶交流。 作者簡介吳校軍,IBM CSTL 軟體工程師,長期從事 IBM 系統管理相關軟體的開發,目前負責 Director6.1 Update Manager 的開發。劉冠群現為 IBM 上海系統科技開發中心(CSTL)的軟體工程師,有多年的 Java 和 C++ 編程經驗,對於操作系統,網路和編程語言的內部實現有強烈興趣。關閉[x]關於報告濫用的幫助報告濫用謝謝! 此內容已經標識給管理員注意。關閉[x]關於報告濫用的幫助報告濫用報告濫用提交失敗。 請稍後重試。關閉[x]developerWorks:登錄IBM ID:需要一個 IBM ID?忘記IBM ID?密碼:忘記密碼?更改您的密碼 保持登錄。單擊提交則表示您同意developerWorks 的條款和條件。 使用條款 當您初次登錄到 developerWorks 時,將會為您創建一份概要信息。您在developerWorks 概要信息中選擇公開的信息將公開顯示給其他人,但您可以隨時修改這些信息的顯示狀態。您的姓名(除非選擇隱藏)和昵稱將和您在 developerWorks 發布的內容一同顯示。所有提交的信息確保安全。關閉[x]請選擇您的昵稱:當您初次登錄到 developerWorks 時,將會為您創建一份概要信息,您需要指定一個昵稱。您的昵稱將和您在 developerWorks 發布的內容顯示在一起。昵稱長度在 3 至 31 個字元之間。 您的昵稱在 developerWorks 社區中必須是唯一的,並且出於隱私保護的原因,不能是您的電子郵件地址。昵稱:(長度在 3 至 31 個字元之間)單擊提交則表示您同意developerWorks 的條款和條件。 使用條款. 所有提交的信息確保安全。為本文評分評論回頁首
② 目前編寫一款簡單的手機應用APP一般用什麼編程語言
編寫手機App,用什麼語言?
從簡單到復雜,可以分三級:
其實就是把網頁封裝成App。編程語言就是網頁三件套:HTML+CSS+Javascript
有多種工具和框架,如Cordova, uni等等。
這種方式實現「App」最容易,且跨平台,對於iOS和Android做一套就行了。代價是功能弱,性能低,換句話說就是「卡」。
這類方案在iOS和Android之上自行實現一套原生框架。通用的Flutter, ReactNative都是流行的原生跨平台框架。適用於 游戲 的Cocos2D,Corona SDK也可以算在這一級里。
這類方案實現App難度中等,因為跨平台,一次開發,iOS和Android都能運行。功能和性能也是中等,比不上原生App,但比HTML5的又好很多。
直接在iOS和Android上各自開發一套原生App。
iOS可以使用Objective C或Swift。
Android可以使用Java或Kotlin。
還是來一個圖表吧,雖然簡單,卻很明了:
推薦用Flutter,簡單。
以前自己用android原生寫過7天酒店簽到程序,不過當時的安卓還是比較難寫的,不像現在越來越容易上手。
Flutter是一個由谷歌開發的開源移動應用軟體開發工具包,用於為Android、iOS、 Windows、Mac、Linux、Google Fuchsia開發應用。
Flutter應用是使用Dart語言編寫的,雖然是新的一種語言,但是難度不算大,上網搜下相關教程學習下,應該就能很快上手。
這里是我上個月仿照教程弄的一個簡單APP,效果圖如下:
點擊"Next"就切換下一張,點擊"Pre"就切換前一張,點擊「Reset」就全部滑落下來。
我女兒最喜歡中間的Reset效果,哈哈。
希望這個答案能幫到你。
現在Flutter正式版已經出來了,原生性能,安卓iOS多平台支持,谷歌大廠背書,大家可以比較放心的學習。編程語言用的是Dart,可以看做是加了語法糖版本的Java,學習起來也比較容易,如果想做手機app,可以考慮使用它。
如果只是自己做著玩的話推薦用H5開發,開發工具HBuilder或者HBuilderX。
先科普下什麼是IOS和Android吧。IOS只是操作系統而已,是蘋果的操作系統。
開發IOS上運行的APP的話,現在流行的語言是Object-C和Swift。
Android也是操作系統,是谷歌基於Linux內核開發出來的手機操作系統。
開發Android上運行的APP的話,現在流行的語言我覺得仍然還是JAVA。
如果想要真的做一款APP的話,不僅僅會一門語言就夠了,涉及的東西比較多,如下是我給你的學習推薦路線。
學習路線:1:先學習js,然後學習下html 、css。
學習這些可以上菜鳥教程或者W3School網站學習。
開發工具使用vscode或者Notepad++都可以的。
2:了解Mui常用組件(官網:https://dev.dcloud.net.cn/mui/ui/),
熟悉常用API(官網:http://www.html5plus.org/doc/h5p.html)。
3:服務端的開發,要麼用java開發,要麼用.net webapi開發,推薦理由,java目前是主流,.net webapi簡單容易。
java 開發工具IntelliJ IDEA,.net 開發工具 vs。
4:數據存儲使用mysql。
補充說明:如果是想做專業開發APP的話還是建議用java開發客戶端,ios APP則用swift開發。
當然現在為了一套代碼多個平台,使用H5開發專業APP的也有。
會了就可以正式擼代碼實現自己簡單的APP了。
回答完畢,謝謝。我是只說代碼的大餅。
那當然首選是h5套殼了。關於語言方面,我建議還是用PHP吧。隨著進一步學習,可以學習uinapp一鍵多端。H5、小程序、App、小程序支持多個平台上架、微信抖音支付寶網路,希望可以幫助你
目前有三種app開發方式:原生app、混合app、webapp。
原生app:安卓需要java語言,ios需要 objec t-c,wp需要的.net語言。這種app用戶體驗最好,性能也是最好的,開發成本高,開發周期長,一款app需要開發多個語言版本;
混合app:需要h5,javascript,了解每個混合框架,比如appcan、hbulider、phonegap等等,以及封裝的中間件。這種開發方式的用戶體驗、性能沒有原生的好,但是他的開發周期短,開發成本低,對開發人員技能掌握比較高,開發一套程序可以兼容到多個設備上;
webapp:需要h5、javascript語言,不能調用底層設備,用戶體驗效果次之,開發簡單,開發成本低,開發周期短,可以兼容多個設備。
綜上所述三種開發各有優缺點,要根據具體的項目需求來選擇適合自己的開發語言和開發場景。
uniapp了解下,多端應用。app的話要考慮安卓和蘋果,但學了二種學習成本比較高。用uniapp就解決了。
現在中小型企業都在逐漸採用跨平台開發的模式 效率高 成本低 作為個人更是開發不二的選擇 你問的iOS和安卓是原生開發 需要不同的開發語言和框架 學習成本也很高 既然你說你是小白 如果採用原生開發 可能得大概花一年半載才能開始上手
採用跨平台開發 只需要學習一下html css JavaScript 然後選擇跨平台開發框架 比如react flutter uniapp 都可以 跨平台就是指你這一套代碼編寫的app可以到不同平台運行 比如iOS安卓都OK 但其實很多還可以編譯到各類小程序平台運行 所以很方便
我這里推薦uniapp 一個基於vue的跨端開發框架 我自己也用這個開發了很多項目 確實很快 也提供了原生渲染能力 不做 游戲 等軟體 基本沒啥問題 社區插件市場也很熱鬧 基本有問題可以很快解決 希望可以幫到你。
按照開發方式可分為原生開發、混合開發、webapp開發,不同的開發方式學習的編程語言不一樣,下面我們來一個一個分析一下:
一、原生開發
原生開發的編程語言主要為針對IOS運行環境的為編程語言為Swift或Object c,安卓環境為Java或Kotlin,WP環境為NET。原生開發的運行效率最高,用戶體驗最好,但是需要學習不同平台的編程語言,學習門檻較高。
二、混合開發(偽原生開發)
混合開發技術主要採用一套特別的渲染引擎來渲染UI界面和交互,按照渲染引擎可分為html與dart,其編程語言主要是Javascript或Typescript、Dart。
目前基於html渲染的開發框架有react native、weex、uniapp,基於dart的開發框架只有flutter。
混合開發由於調用了原生的控制項來渲染UI,所以載入和體驗與原生差不多,學習成本比較低,只要會js,選擇一個框架開發就行了,或者學習dart語言,進行flutter開發。
三、webapp開發
webapp開發主要利用原生環境中的瀏覽器控制項來裝載伺服器上的html頁面,實際這個app就是一個自定義的瀏覽器app,所以只要會html,就會開發webapp,由於app內部載入的是遠程的網頁,所以載入速度和體驗最差。
以上是我個人的總結,有不對的歡迎指出,謝謝。
本人用c#,除了單片機用c,cad CATIA,多媒體主要Adobe,它幹完所有,不需要性能的視圖混合dom代碼。
③ java.net是什麼,包括什麼技術
javanet是Java技術相關的社區網站,它還提供了基於網路的一個Java項目的源代內碼庫。
java.net 包可以大致分為兩個容部分:
低級 API,用於處理以下抽象:
地址,也就是網路標識符,如 IP 地址。
套接字,也就是基本雙向數據通信機制。
介面,用於描述網路介面。
高級 API,用於處理以下抽象:
URI,表示統一資源標識符。
URL,表示統一資源定位符。
連接,表示到 URL 所指向資源的連接。
④ 我的世界聯機時顯示無法連接寫javanet..
具體原因具體分析:看你連得什麼,廣域網的伺服器還是區域網開放,伺服器原因很多,區域網一般是MOD和游戲版本的問題,區域網每個客戶端的MOD要相同,而且不要裝多了,伺服器看看用戶名填了沒,要不要白名,還有埠佔用。
⑤ 網站建設用到什麼語言
目前,最常用的四種動態網站建設語言有:ASP、ASP.net、PHP和JSP.
網頁從開始簡單的hmtl到復雜的服務語言,走過了10多個年頭,各種技術層出不窮,單個的主流技術也在不斷翻新的版本,現在分析下各種語言的區別、優勢、劣勢、開發注意事項!
HTML:當然這是網頁最基本的語言,每一個伺服器語言都需要它的支持,要學習,這個肯定是開始,不說了.
主流網站開發語言之ASP:ASP是微軟(Microsoft)所開發的一種後台腳本語言,它的語法和Visual BASIC類似,可以像SSI(Server Side Include)那樣把後台腳本代碼內嵌到HTML頁面中。雖然ASP簡單易用,但是它自身存在著許多缺陷,最重要的就是安全性問題。目前在微軟的 .net 戰略中新推出的ASP.net 借鑒了Java技術的優點,使用C Sharp (C#) 語言作為ASP.net的推薦語言,同時改進了以前ASP的安全性差等缺點。但是,使用ASP/ASP.net仍有一定的局限性,因為從某種角度來說它們只能在微軟的 Windows NT/2000/XP + IIS的伺服器平台上良好運行(雖然像ChilliSoft提供了在UNIX/Linux上運行ASP的解決方案,但是目前ASP在UNIX/Linux上的應用可以說幾乎為0)。所以平台的局限性和ASP自身的安全性限制了ASP的廣泛應用。
ASP在執行的時候,是由IIS調用程序引擎,解釋執行嵌在HTML中的ASP代碼,最終將結果和原來的HTML一同送往客戶端
主流網站開發語言之PHP:PHP 的全名非常有趣,它是一個巢狀的縮寫名稱——「PHP: Hypertext Preprocessor」,打開縮寫還是縮寫。PHP是一種HTML 內嵌式的語言 (就像上面講的ASP那樣)。而 PHP 獨特的語法混合了C,Java,Perl以及 PHP 式的新語法。它可以比 CGI 或者 Perl 更快速地執行動態網頁。
PHP的源代碼完全公開,在 Open Source 意識抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函數庫加入,以及不停地更新,使得 PHP 無論在 UNIX 或是 Win32 的平台上都可以有更多新的功能。它提供豐富的函數,使得在程式設計方面有著更好的資源。目前PHP的最新版本為4.1.1 ,它可以在Win32以及UNIX/Linux等幾乎所有的平台上良好工作。PHP在4.0版後使用了全新的Zend引擎,其在最佳化之後的效率,比較傳統 CGI 或者 ASP 等技術有了更好的表現。
平台無關性是PHP的最大優點,但是在優點的背後,還是有一些小小的缺點的。如果在PHP中不使用ODBC,而用其自帶的資料庫函數(這樣的效率要比使用ODBC高)來連接資料庫的話, 使用不同的資料庫,PHP的函數名不能統一。這樣,使得程序的移植變得有些麻煩。不過,作為目前應用最為廣泛的一種後台語言,PHP的優點還是異常明顯的。
主流網站開發語言之ASP.NET:ASP.net是Microsoft.net的一部分,作為戰略產品,不僅僅是 Active Server Page (ASP) 的下一個版本;它還提供了一個統一的 Web 開發模型,其中包括開發人員生成企業級 Web 應用程序所需的各種服務。ASP.NET 的語法在很大程度上與 ASP 兼容,同時它還提供一種新的編程模型和結構,可生成伸縮性和穩定性更好的應用程序,並提供更好的安全保護。可以通過在現有 ASP 應用程序中逐漸添加 ASP.NET 功能,隨時增強 ASP 應用程序的功能。ASP.NET 是一個已編譯的、基於 .NET 的環境,可以用任何與 .NET 兼容的語言(包括 Visual Basic .NET、C# 和 JScript .NET.)創作應用程序。另外,任何 ASP.NET 應用程序都可以使用整個 .NET Framework。開發人員可以方便地獲得這些技術的優點,其中包括託管的公共語言運行庫環境、類型安全、繼承等等。ASP.NET 可以無縫地與 WYSIWYG HTML 編輯器和其他編程工具(包括 Microsoft Visual Studio .NET)一起工作。這不僅使得 Web 開發更加方便,而且還能提供這些工具必須提供的所有優點,包括開發人員可以用來將伺服器控制項拖放到 Web 頁的 GUI 和完全集成的調試支持。微軟為ASP.net設計了這樣一些策略:易於寫出結構清晰的代碼、代碼易於重用和共享、可用編譯類語言編寫等等,目的是讓程序員更容易開發出Web應用,滿足計算向Web轉移的戰略需要。
如今主流的Web伺服器軟體主要由IIS或Apache組成。IIS支持ASP且只能運行在Windows平台下,Apache支持PHP,CGI,JSP且可運行於多種平台,雖然Apache是世界使用排名第一的Web伺服器平台,但是眾所周知,Windows以易用而出名,也因此占據不少的伺服器市場。
我們常用的開發組合:
IIS環境下
1.ASP+ACCESS
2.ASP+SQL SERVER
3.ASP.NET+ACCESS
4.ASP.NET+SQL SERVER
5.PHP+MYSQL
下面比較一下ASP、ASP.net、JSP和PHP的優點和缺點:
ASP優點:
1. 無需編譯
2. 易於生成
3. 獨立於瀏覽器
4. 面向對象
5. 與任何ActiveX scripting 語言兼容
6. 源程序碼不會外漏
缺點:
1、Windows本身的所有問題都會一成不變的也累加到了它的身上。安全性、穩定性、跨平台性都會因為與NT的捆綁而顯現出來。
2、ASP由於使用了COM組件所以它會變的十分強大,但是這樣的強大由於Windows NT系統最初的設計問題而會引發大量的安全問題。只要在這樣的組件或是操作中一不注意,哪么外部攻擊就可以取得相當高的許可權而導致網站癱瘓或者數據丟失。
3、由於ASP還是一種Script語言所沒除了大量使用組件外,沒有辦法提高其工作效率。它必須面對即時編繹的時間考驗,同時我們還不知其背後的組件會是一個什麼樣的狀況。
4、無法實現跨操作系統的應用。當然這也是微軟的理由之一,只有這樣才能發揮ASP最佳的能力。可是我卻認為正是Windows限制了ASP,ASP的概念本就是為一個能讓系統運行於一個大的多樣化環境而設計的。
5、還無法完全實現一些企業級的功能:完全的集群、負載均橫。
ASP.NET優點:
1. 簡潔的設計和實施。
2. 語言靈活,並支持復雜的面向對象特性。
3. 開發環境。
缺點:
1.資料庫的連接復雜。
PHP優點:
1、 一種能快速學習、跨平台、有良好資料庫交互能力的開發語言。
2、 簡單輕便,易學易用。
3、 與Apache及其它擴展庫結合緊密。
4、 良好的安全性。
缺點:
1、 資料庫支持的極大變化。
2、 不適合應用於大型電子商務站點
3、 安裝復雜。
4、 缺少正規的商業支持。
5、 無法實現商品化應用的開發。
⑥ 介面的作用,為什麼要用介面
介面可以被編寫的多個程序重復調用,可以節省電腦的存儲空間,並且使用介面可以減少電腦代碼運行時出現的錯誤,在運行多個程序時,也能更有效率的進行。
在計算機里,需要由其他類型的程序實現介面,以保證它們支持某些操作,完成介面的運行。介面指定必須由類提供的成員或其他介面來實現。並且,介面可以包含方法、屬性、索引器和事件作為成員,在計算機語言中的使用靈活又方便。
(6)netjava混合使用擴展閱讀
介面在計算機語言的應用:
1、Java里的介面
Java裡面由於不允許多重繼承,所以如果要實現多個類的功能,則可以通過實現多個介面來實現。如果要提高程序的復用率,增加程序的可維護性,可擴展性,就必須是面向介面的編程,面向抽象的編程,正確地使用介面、抽象類這些太有用的抽象類型做為java結構層次上的頂層。
2、c#中的介面
定義:介面是一種約束形式,其中只包括成員定義,不包含成員實現的內容。
目的:介面的主要目的是為不相關的類提供通用的處理服務,由於C#中只允許樹形結構中的單繼承,即一個類只能繼承一個父類,所以介面是讓一個類具有兩個以上基類的唯一方式。
聲明:介面聲明的方式與聲明類的方式相似,但使用的關鍵字是interface,而不是 class。
3、VB.NET介面
在VB.NET的類里,實現一個介面的語句是:
implements介面名稱