<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    很久很久以前

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      34 隨筆 :: 4 文章 :: 17 評論 :: 0 Trackbacks

    2007年5月17日 #

    Winsock 10053錯誤分析

     WSAGetLastError可能會返回10053錯誤,查msdn的解釋是:

    WSAECONNABORTED 10053

    Software caused connection abort.

    An established connection was aborted by the software in your host computer, possibly due to a data transmission time-out or protocol error.

    神馬?軟件原因造成的連接中斷,這是什么意思,不跟沒說一樣的么?
    google一下唄

    Berkeley description:

    A connection abort was caused internal to your host machine. The software caused

    a connection abort because there is no space on the socket’s queue and the socket

     cannot receive further connections.

           

    WinSock description:

    Partly the same as Berkeley. The error can occur when the local network system aborts

    a connection. This would occur if WinSock aborts an established connection after data

    retransmission fails  (receiver never acknowledges data sent on a datastream socket).

           

    TCP/IP scenario:

    A connection will timeout if the local system doesn’t receive an (ACK)nowledgement for

    data sent.  It would also timeout if a (FIN)ish TCP packet is not ACK’d

    (and even if the FIN is ACK’d, it will eventually timeout if a FIN is not returned).

     

    伯克利說這種連接中斷是因?yàn)樗拗鳈C(jī)器的內(nèi)部原因,因?yàn)檐浖?dǎo)致的連接中斷,可能是因?yàn)閟ocket的隊(duì)列滿并且這個(gè)socket不能接收更多的連接了。
    這還不如不說,越說越糊涂了。
    winsocket的描述,似乎還靠譜一些,這種錯誤一般發(fā)生在一個(gè)建立的連接被重發(fā)失敗的情況下產(chǎn)生,接收方?jīng)]有響應(yīng)數(shù)據(jù)發(fā)回來。但還是比較模糊。
    再看看tcp ip標(biāo)準(zhǔn)文檔的說法,如果本地系統(tǒng)沒有收到發(fā)送數(shù)據(jù)的響應(yīng)(ack)那么這連接就會超時(shí)。如果tcp的fin包沒有被ack(或者fin包被ack了但fin沒有返回)那么也會超時(shí)。但是,但是,超時(shí)跟這個(gè)10053有神馬關(guān)系?
    再看后續(xù)的解釋:
    從參考1中找到如下的描述:

    The Scenario: 
    An HTTP POST is to be sent to an HTTP server.
    The server begins reading the POST and notices that the HTTP request header is invalid.
    It immediately sends an HTTP response (with an error status, perhaps status=400) and closes the connection without trying to continue reading the remainder of the HTTP request that is forthcoming.

    Meanwhile, the client is still happily writing the remainder of the HTTP request to the socket. (Remember a TCP/IP socket connection needs to be closed from both sides. In this case, the server has closed its side, but the client is still pumping data into the half-open connection.)
    The client finishes writing the HTTP POST to the socket — meaning that data has been buffered to Winsock. The client application then tries to read the HTTP response, but it cannot because the outgoing retransmission (of the buffered data by WinSock) failed and the socket connection was shutdown on the client side (by Winsock). Even though the HTTP server sent the response, it is lost and cannot be retrieved. The error your application will receive when
    trying to read the HTTP response on the socket is WSAECONNABORTED. The word "software" in any of the above error messages refers to "WinSock".

    Go back and re-read the original error explanations. Hopefully, after that explanation, you’ll say "Aha! I understand what they’re talking about!".

     

    啊哈,又有http了,大概意思就是http server收到請求了,但發(fā)現(xiàn)有問題,那么回一個(gè)http錯誤碼,然后就關(guān)閉了socket,但與此同時(shí),client端還在很開心地向socket寫數(shù)據(jù),注意哦,tcp是全雙工的。client寫完畢后,實(shí)際上數(shù)據(jù)只是放到了發(fā)送方的緩沖區(qū)中,不一定已經(jīng)發(fā)出去了,如果寫得不好的程序,這個(gè)時(shí)候就開始從socket讀數(shù)據(jù)了,這時(shí)候就會產(chǎn)生一個(gè)WSACONNECTABORTED錯誤,windows上對應(yīng)的就是10053錯誤。

    但這個(gè)解釋實(shí)際上是不能讓人滿意的,只是舉出了一種場景,但為什么會產(chǎn)生還沒有解釋。后面又搜到了個(gè)參考2,首先解釋10053錯誤是收到fin后client會放棄發(fā)送緩沖區(qū)中的數(shù)據(jù),同時(shí)上報(bào)錯誤。雖然說法還有點(diǎn)一頭霧水。

    不過這兩個(gè)參考給我們一個(gè)思路,重現(xiàn)這個(gè)問題。

    于是簡單寫個(gè)測試用的c-s程序,大概流程如下

     

     

    圖1 CS程序簡化流程圖

    這個(gè)簡單程序演示如何出現(xiàn)10053錯誤(以及10054錯誤)。

    如果server在收到client發(fā)送的數(shù)據(jù)后立即關(guān)閉socket,那么client再讀時(shí),會收到10053錯誤;如果server收到發(fā)送數(shù)據(jù)后,立即crash,那么隨后client再讀取時(shí)會收到10054錯誤。

    ok,能夠重現(xiàn)場景了,那么我們來分析一下更細(xì)節(jié)的方面,網(wǎng)絡(luò)問題自然是抓包,本問題處理抓包還要看一下tcp的狀態(tài)以便輔助分析,我們在client端每次操作之前都打印當(dāng)前的tcp狀態(tài)。

    下面是client端發(fā)送記錄和對應(yīng)的netstat情況

    圖2 10053錯誤client端tcp狀態(tài)流轉(zhuǎn)

    client在發(fā)送之前tcp狀態(tài)是established,在發(fā)送之后,server會立即關(guān)閉,tcp狀態(tài)也變?yōu)閏lose_wait,但這只是單方向的關(guān)閉,client可以繼續(xù)發(fā)數(shù)據(jù),但client發(fā)送后,server立即退出了,導(dǎo)致后續(xù)recv會失敗并且返回10053。對應(yīng)抓包情況如下:



    圖3 10053錯誤client端tcp抓包

    整個(gè)通信過程如下:
    1-3.三次握手建立連接
    4.客戶端(10.10.86.93)向服務(wù)器端(10.10.86.98)發(fā)送數(shù)據(jù),1字節(jié)
    5.server 中止 發(fā)送fin(同時(shí)ack之前那個(gè)push)
    6.client ack 那個(gè)fin
    7.client再發(fā)送兩個(gè)字節(jié)
    8.server此時(shí)已經(jīng)關(guān)閉socket,屬于非正常情況,回復(fù)復(fù)位命令

    整個(gè)過程可以重現(xiàn)10053情況,tcp發(fā)送分組數(shù)據(jù)的情況也一目了然,事情到此就可以了么?顯然不是,你也看到了后面還有很多文字,不知此時(shí)你心中的問題是否跟我一樣,先說我自己的吧,通過抓包發(fā)現(xiàn)這里的異常關(guān)閉有個(gè)reset,但reset一般是10054(Connection reset by peer)的錯誤,那么10053與10054的區(qū)別在哪里。要搞清楚問題也不難,重現(xiàn)場景抓包分析。
    以下是修改上面的cs程序,在client發(fā)送的1字節(jié)包后,立即crash,這導(dǎo)致的問題是操作系統(tǒng)會立即回收所有資源,包括socket資源。




    圖4 10054錯誤client端tcp狀態(tài)流轉(zhuǎn)

    可以看到在crash之前這個(gè)tcp都是established狀態(tài)。crash之后,client端接收數(shù)據(jù)時(shí)會收到10054錯誤,場景重現(xiàn)了,我們再看一下抓包情況



    圖5 10054錯誤client端tcp抓包

    這個(gè)抓包情況跟10053很像,1-7也同10053,在8時(shí),client收到server發(fā)過來的reset,表示當(dāng)前連接被強(qiáng)制復(fù)位了。
    對比10053和10054可以發(fā)現(xiàn),如果srv返回fin標(biāo)志后再reset那么對應(yīng)的錯誤就是10053,如果直接reset就是10054錯誤。回過頭來在看參考2中的說法也就有點(diǎn)感覺了。

    總結(jié)一下:
    1.遇到不了解的問題,google是非常好的方法
    2.對于一般問題,重現(xiàn)之很重要,可以反復(fù)發(fā)現(xiàn)問題并驗(yàn)證問題。自己寫程序或者搭環(huán)境盡量重現(xiàn)。
    3.網(wǎng)絡(luò)問題抓包是利器,包括各種工具的使用netstat wireshark ping traceroute等。
    4.多重問題對比其中的差異,這里對比10053錯誤和10054錯誤。
    5.理論基礎(chǔ)要搭好,本次問題主要是tcp的異常斷開問題,熟悉tcp斷開的半關(guān)閉和復(fù)位邏輯,不過理論還是理論,同樣是復(fù)位在不同場景下的錯誤碼不同。并且實(shí)現(xiàn)上也跟具體的操作系統(tǒng)相關(guān)。
    6.實(shí)際工作中,
    10053錯誤時(shí),用戶主要是處于透明代理情況,那么這一般是又有用戶所在的代理服務(wù)器異常關(guān)閉導(dǎo)致的,可能跟我們的離線文件私有協(xié)議被用戶所在的代理服務(wù)器拒絕掉導(dǎo)致的。

    7.回過頭來在看一開始的解釋,所謂軟件原因造成的連接終端,就是本例子中,server端在shoutdown本方向傳輸時(shí),立即關(guān)閉了socket,導(dǎo)致本應(yīng)該等待對方發(fā)送fin來完全結(jié)束的正常邏輯被打破,編程單方向強(qiáng)制中止本次tcp,導(dǎo)致client端之后向上報(bào)錯,就是所謂的10053錯誤了,這里的軟件就是server端的那個(gè)程序。(不過也有種說法是,客戶端發(fā)送錯誤數(shù)據(jù),導(dǎo)致server端保護(hù)機(jī)制而強(qiáng)制關(guān)閉)


    參考:

    1. http://www.chilkatsoft.com/p/p_299.asp   
    2. http://bbs.csdn.net/topics/360024280#post-361829232
    3. 《TCP/IP詳解(卷一)》18章 TCP連接的建立和中止

     

     

    posted @ 2013-11-28 11:22 Long Long Ago 閱讀(29198) | 評論 (1)編輯 收藏

    最近改造文件傳輸,參考libcurl,考慮到他支持那么多協(xié)議,但我只關(guān)心http的,所以考慮是否可以只生成http支持的版本,查了一下,果然可以。
    下載,如果不需要最新的,那么只要下載個(gè)zip包就好了。
    通過download wizard可以指引你下載不同的版本:http://curl.haxx.se/dlwiz/
    選擇
    source code - 平臺無關(guān)- 找到最新版本下載,解壓縮
    編譯比較簡單有build指令
    不過我從vs目錄下找到一個(gè)2005版本的vcproj文件,用這個(gè)也可以編譯,不過要設(shè)置一下include目錄為../../../include
     上面是廢話了,關(guān)鍵的怎么值生成對http的支持呢
    只要在編譯指令中增加定義HTTP_ONLY宏就可以了,就這么簡單。
    詳細(xì)說明在這里http://curl.haxx.se/docs/install.html
    posted @ 2013-11-21 20:40 Long Long Ago 閱讀(700) | 評論 (0)編輯 收藏

    路由器軟件部分的幾個(gè)概念:CFE、固件(Firmware)、NVRAM
    CFE的作用跟PC的BIOS一樣是負(fù)責(zé)引導(dǎo)操作系統(tǒng)的;固件就是路由器的操作系統(tǒng),就像PC上的Windows一樣;NVRAM則用于存儲路由器的設(shè)置,相當(dāng)于PC的CMOS。
    當(dāng)路由器插上電后自動進(jìn)入CFE,CFE進(jìn)行類似PC的BIOS那樣進(jìn)行自檢,自檢通過后就引導(dǎo)路由器的固件了(相當(dāng)于的PC的Windows了),正常情況下最多一分鐘路由器的固件就會引導(dǎo)完畢,并且Power燈是常亮的。如果Power燈一閃一閃,那一般是CFE沒有引導(dǎo)成功路由器的固件(固件不存在、不正確、已損壞等等)。
    那么我們平常刷固件會把CFE也刷了嗎?呵呵,不會的,就像你平時(shí)裝Windows一樣,不管你是裝XP也好,Vista也好,Win7也好,都不會對你的BIOS進(jìn)行更新。那我想刷CFE該用什么方法?一般用戶用路由器原廠的CFE即可,如果要玩的深入一些想刷CFE,那么可以通過JTAG或者telnet方式來刷(比較危險(xiǎn),而且受固件限制,有些固件不支持)。
    主要是對硬件環(huán)境進(jìn)行初始化,image的更新,加載kernel等
    posted @ 2013-11-13 20:34 Long Long Ago 閱讀(254) | 評論 (0)編輯 收藏

    好久沒有更新這個(gè)blog了,java也放下了許久。現(xiàn)在開始重新更新本blog
    posted @ 2010-10-30 13:44 Long Long Ago 閱讀(238) | 評論 (0)編輯 收藏

    本文主要介紹了JXTA中的各種概念。
    1.Peer。一個(gè)peer就是實(shí)現(xiàn)了一個(gè)或多個(gè)JXTA協(xié)議的網(wǎng)絡(luò)設(shè)備。比如傳感器,電話, PDA,PC,服務(wù)器,巨型機(jī)等等。每一個(gè)peer與其他peer都是獨(dú)立操作并且是異步的。有peer ID來唯一標(biāo)識一個(gè)peer。peer使用JXTA協(xié)議公開一個(gè)或多個(gè)網(wǎng)絡(luò)接口(network interface),每一個(gè)公開的接口都被廣告為一個(gè)peer端點(diǎn)(peer endpoint),這個(gè)peer端點(diǎn)唯一標(biāo)識了一個(gè)網(wǎng)絡(luò)接口。peer之間不需要有直接的點(diǎn)對點(diǎn)的網(wǎng)絡(luò)連接。可以使用中間的peer作為peer的消息路由,將由于硬件網(wǎng)絡(luò)或者網(wǎng)絡(luò)配置(NATs,防火墻或者代理)而造成的兩個(gè)通信peer進(jìn)行互聯(lián)。peer通常被設(shè)計(jì)成網(wǎng)絡(luò)中自然地互相發(fā)現(xiàn),從而構(gòu)成暫時(shí)的或持久的關(guān)系成為peer組(peer gorup)。
    2.Peer Group.一個(gè)peer組是一個(gè)peer的集合,這些peer都有一組相同的服務(wù)。peer自組織的加入到peer組中,并通過一個(gè)唯一的peer組id來區(qū)別這些peer組。每一個(gè)peer組都可以建立一個(gè)屬于自己的memebership policy,從任何人可以加入到最嚴(yán)格的安全驗(yàn)證以及受保護(hù)方式(需要完全的認(rèn)證書來加入)。一個(gè)peer可以同時(shí)屬于多于一個(gè)peer組。默認(rèn)地,第一個(gè)peer組被實(shí)例的組是Net Peer Group。所有的peer都屬于Net Peer Group。peer可以選擇加入其他的peer group。JXTA協(xié)議描述了peer如何公開,發(fā)現(xiàn),加入以及監(jiān)控peer組。
         如下幾點(diǎn)說明了創(chuàng)建peer組的目的。
    1. 建立安全的環(huán)境。peer組可以創(chuàng)建一個(gè)本地控制域,在這個(gè)域中使用一個(gè)特定的安全策略。這個(gè)安全策略可以簡單的只是一個(gè)明文的帳號 /口令交換,也可以像PKI一樣成熟。peer組界定認(rèn)證的成員訪問和公開受保護(hù)的內(nèi)容(content)。peer組在建立了一個(gè)邏輯上的區(qū)域,從而對訪問peer組的資源進(jìn)行界定。
    2. 創(chuàng)建一個(gè)范圍環(huán)境。peer組裕興建立一個(gè)本地的專用域。比如,peer可以組織起來實(shí)現(xiàn)一個(gè)文檔共享網(wǎng)絡(luò)或者一個(gè)CPU共享網(wǎng)絡(luò)。 peer組提供細(xì)分網(wǎng)絡(luò)成抽象的區(qū)域來提供內(nèi)在范圍機(jī)制(implicit scoping mechanism)。比如,當(dāng)搜索一個(gè)組內(nèi)容的時(shí),peer組可以界定定義一個(gè)搜索范圍。
    3. 創(chuàng)建一個(gè)監(jiān)視環(huán)境。peer組允許一個(gè)peer為了任何目的去監(jiān)視一組peer(比如,心跳,traffic introspection或者accountability)。peer組也可以構(gòu)建一個(gè)父子層次結(jié)構(gòu),其中任何一個(gè)組都有一個(gè)唯一的父親。查詢請求能偶在這個(gè)組中傳播。對于這個(gè)組中的廣告也可以在其父組中公開,當(dāng)然也包裹這個(gè)組本身。
    peer組提供了一組服務(wù)成為peer組服務(wù)。在JXTA中敵營了一個(gè)核心peer組服務(wù)集合。兩個(gè)peer如果要通過一個(gè)服務(wù)進(jìn)行交互,他們配需位于同一個(gè)peer中。
        核心的組服務(wù)有如下:
    1. 發(fā)現(xiàn)服務(wù)(Discovery Service)。本服務(wù)被組中的peer用來查詢per組資源,比如peer,peer組,通道和服務(wù)等。
    2. 成員關(guān)系服務(wù)(Membership Service)。本服務(wù)被當(dāng)前成員用來拒絕或接受一個(gè)新的組成員應(yīng)用。一個(gè)peer想要加入到一個(gè)group前,首先要確定一個(gè)當(dāng)前的成員,并請求加入。當(dāng)前成員的集合可以拒絕或者接受某個(gè)想加入的應(yīng)用(application)。本服務(wù)可能會發(fā)起一個(gè)所有peer或者指定組代表的一次投票來決定是否接受或者聚居新的成員應(yīng)用。
    3. 訪問服務(wù)(Access Service)。使用訪問服務(wù)可以用來驗(yàn)證一個(gè)peer對另一個(gè)peer的請求(request)。如果訪問被允許,那么接受請求的peer會提供給請求peer關(guān)于該請求所要知道的信息的信任和相關(guān)信息。(注意,在peer組中,不是所有的行為(action)都需要通過訪問服務(wù)的檢查,只有那些在某些peer中被限制的行為在需要調(diào)用時(shí),才被檢查。)
    4. 管道服務(wù)(Pipe Service)。本服務(wù)用于在peer組成員間的鏈接管道的建立和管理。
    5. Resolver服務(wù)。本服務(wù)用來發(fā)送一般的查詢請求到其他的peer。peer可以定義和交換請求以便發(fā)現(xiàn)任何需要的信息(比如一個(gè)服務(wù)的狀態(tài)或者一個(gè)管道端點(diǎn)的信息。)
    6. 監(jiān)視服務(wù)(Monitoring Service)。本服務(wù)用來讓一個(gè)peer監(jiān)視本組中的其他成員服務(wù)。
        不是所有上面提到的服務(wù)都必須要被每個(gè)peer實(shí)現(xiàn)。一個(gè)peer組可以自由的實(shí)現(xiàn)那些它認(rèn)為有用的服務(wù),并可以依賴于默認(rèn)的Net Peer Group來提供非關(guān)鍵核心服務(wù)的一般實(shí)現(xiàn)。
    3.Network Services。peer之間可以協(xié)作并通信以發(fā)布,發(fā)現(xiàn)和啟動網(wǎng)絡(luò)服務(wù)。peer可以發(fā)布多個(gè)服務(wù)。peer通過Peer Discovery Protocol來發(fā)現(xiàn)network service。在JXTA協(xié)議中組織了兩個(gè)層次上的network service。
    • Peer Service。一個(gè)peer service只有當(dāng)peer公布了自己的service時(shí)才能被訪問。如果這個(gè)peer失敗了,那么它的service也失敗了。不同的peer可以運(yùn)行某個(gè)服務(wù)的多個(gè)實(shí)例,但每個(gè)實(shí)例都必須公開自己的廣告(advertisement).
    • Peer Group Service。peer組服務(wù)是這個(gè)組中成員所運(yùn)行服務(wù)的實(shí)例的集合的組織形式,其中這些實(shí)例是互相合作的。如果其中任何一個(gè)peer失敗了,那么這個(gè) peer組服務(wù)將不會收到影響(假定這個(gè)服務(wù)可以從其他peer獲得)。peer group服務(wù)通過peer 組廣告的以部分來發(fā)布。
        服務(wù)可以是事先被安裝到peer上或者通過網(wǎng)絡(luò)安裝的。為了真正的運(yùn)行一個(gè)服務(wù),peer必須為定位一個(gè)適合當(dāng)前peer運(yùn)行環(huán)境的一個(gè)實(shí)現(xiàn)。這個(gè)從網(wǎng)絡(luò)上查找,下載和安裝一個(gè)服務(wù)的過程很類似于在Internet上搜索一個(gè)Web頁面,取回這個(gè)頁面然后再安裝需要的插件的過程。
    4.Modules。JXTA的module用來描述任何一段用來實(shí)現(xiàn)JXTA world中一個(gè)行為的“代碼”的抽象表示(Abstraction)。Network Service就是在一個(gè)peer上實(shí)現(xiàn)的行為的一個(gè)最一般的例子。這個(gè)Module Abstraction不一定特指什么“代碼”,它可以是一個(gè)Java類,也可以是Java jar,或者動態(tài)鏈接庫dll,一個(gè)XML消息或是一個(gè)腳本。這個(gè)module的行為交給了module的實(shí)現(xiàn)者。對于一個(gè)實(shí)例(instance), module表示了一個(gè)網(wǎng)絡(luò)服務(wù)(network service)在不同平臺上的不同實(shí)現(xiàn),這些平臺比如說在java平臺,MS windows平臺,Solaris 平臺。
        Module允許peer實(shí)現(xiàn)一個(gè)新的行為,通過提供了一個(gè)一般的抽象。當(dāng)peer瀏覽或者加入一個(gè)peer組時(shí),他可以查找新的其打算實(shí)現(xiàn)的行為。比如,當(dāng)加入一個(gè)peer組后,一個(gè)peer可能必須學(xué)習(xí)新的搜索服務(wù),這個(gè)服務(wù)只能在本peer組中使用。為了加入到這個(gè)組,這個(gè)peer必須實(shí)現(xiàn)這個(gè)新的搜索服務(wù)。這個(gè)module框架可以啟動平臺無關(guān)行為的表示(representation)和廣告(advertisement)。并允許peer描述和實(shí)現(xiàn)任何形式這個(gè)行為(behavior)的是實(shí)現(xiàn)。比如,一個(gè)peer使用java或者c實(shí)現(xiàn)一個(gè)行為的實(shí)現(xiàn)。
    & amp; nbsp;   描述和公告一個(gè)平臺獨(dú)立的行為的能力能有有效的支持peer組包含異構(gòu)的peer。module的廣告可以使JXTA的peer能夠采用平臺獨(dú)立的方式描述一個(gè)行為。JXTA平臺使用module廣告來自描述。
        module抽象(Module abstractIon)包括一個(gè)module class,module specification和一個(gè)moduleimplementation。
    • Module Class。module class主要用于廣告一個(gè)行為(behavior)的存在。這個(gè)class的定義表述了一個(gè)期望的行為和一個(gè)期望的對所支持的module的綁定。每一個(gè)module class都有一個(gè)唯一的ID,成為MoudleClassID
    • Module Specification。Module Specification主要用于訪問這個(gè)module。它包含了訪問或者啟動這個(gè)module的所有必要的信息。比如,一個(gè)服務(wù),他的module specification可能包含了一個(gè)用于和其他服務(wù)相通信的管道的廣告。一個(gè)module specification用于提供module class所指明的功能。對于一個(gè)module class可能有多個(gè)module specification。每一個(gè)module specification都有一個(gè)唯一的id,ModuleSpecID。ModuleSpecID包含了ModuleClass ID,并指明了所使用的module class。一個(gè)module specification暗含了對網(wǎng)絡(luò)的兼容性。對于一個(gè)給定的module specification的所有實(shí)現(xiàn)都必須使用相同的協(xié)議,這些實(shí)現(xiàn)都需要是兼容的,即使使用不同的語言實(shí)現(xiàn)的。
    • Module Implementation。Module Implement是一給定module specification的實(shí)現(xiàn)。對于一個(gè)module specification可以有多個(gè)module implementation。每一個(gè)module implementation都包含了它所實(shí)現(xiàn)的與specification相關(guān)聯(lián)的ModuleSpecID。
        Module可以被peer組服務(wù)使用,也可以被獨(dú)立的服務(wù)所使用。JXTA服務(wù)通過module abstraction來區(qū)別存在的服務(wù)(他的Module Class),服務(wù)的specification(Module Specification),或者服務(wù)的實(shí)現(xiàn)(Service Implementation)。所有的這些都有一個(gè)聯(lián)合的廣告,并且可以通過其他JXTA peer來公告和發(fā)現(xiàn)的。作為一個(gè)例子,考慮JXTA的發(fā)現(xiàn)服務(wù)。它包含一個(gè)唯一的ModuleClassID,標(biāo)識了他作為一個(gè)發(fā)現(xiàn)服務(wù)——他的抽象功能。對于這個(gè)發(fā)現(xiàn)服務(wù)可以有多個(gè)不同的規(guī)范(Specification),并伴隨著不同的實(shí)現(xiàn)。對于組的大小和在網(wǎng)絡(luò)中的傳播方式可以使用不同的裁剪策略。每一個(gè)Specification都有唯一的MdouleSpecID,其中指明了發(fā)現(xiàn)發(fā)現(xiàn)服務(wù)的ModuleClassID。對于每個(gè)規(guī)范,都可能有多種實(shí)現(xiàn),每種實(shí)現(xiàn)都包含了相同的ModuleSpceID。
        總之,對于一個(gè)給定的module Class都可能有多種規(guī)范,這些規(guī)范可能是完全不同的。然而任何給定規(guī)范的所有實(shí)現(xiàn)都是假定可以互相兼容的。
    posted @ 2007-05-19 23:11 Long Long Ago 閱讀(960) | 評論 (0)編輯 收藏

    JFace的單獨(dú)使用很久都沒有做過,基本上都是在開發(fā)elcipse插件時(shí)用JFace。今天使用JFace作為Java Application時(shí)遇到了 Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IStatus 錯誤,雖然已經(jīng)添加了org.eclipse.jface,org.eclipse.core.runtime,org.eclipse.osgi包,但仍然出錯,后來發(fā)現(xiàn)org.eclipse.core.runtime.IStatus是在org.eclipse.equonix.common包中,添加后發(fā)現(xiàn) ,還需要添加org.eclipse.core.command包,再添加后搞定。
    posted @ 2007-05-17 14:33 Long Long Ago 閱讀(1061) | 評論 (2)編輯 收藏

        以前實(shí)現(xiàn)SWT中的模式和非模式窗體(modal or non-modal window )是通過在子窗體中是否截取父窗體的消息循環(huán)來實(shí)現(xiàn)的,現(xiàn)在發(fā)現(xiàn)這樣好像不行了,但可以通過指定子窗體的樣式(style)來制定子窗體是否是模式窗體。
    Shell child = new Shell(shell,SWT.SHELL_TRIM|SWT.APPLICATION_MODAL);
    上面的語句指定了子窗體child為模式窗體。在上面的style中指定SWT.SHELL_TRIM 是為了顯示窗體的三個(gè)默認(rèn)按鈕(最大,最小和關(guān)閉),也可以用SWT.DIALOG_TRIM,不過此時(shí)為對話框樣式,只有一個(gè)默認(rèn)按鈕(關(guān)閉)。默認(rèn)的Shell是非模式窗體,并且是有默認(rèn)系統(tǒng)按鈕的,即樣式為:SWT.SHELL_TRIM|SWT.MODELESS。
    順便說一下,在JFace的Dialog中使用模式對話框只要簡單的設(shè)置該對話框setBlockOnOpen(true)即可。
    posted @ 2007-05-17 14:27 Long Long Ago 閱讀(2131) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲一本综合久久| 亚洲国产成人高清在线观看| 亚洲成人福利在线| 无码av免费一区二区三区试看| 国产AV无码专区亚洲AWWW| fc2免费人成在线| 亚洲中文字幕无码一区二区三区| 人妻无码中文字幕免费视频蜜桃| 亚洲国产精品无码久久久久久曰 | 皇色在线免费视频| 久久精品国产亚洲7777| 国产免费牲交视频免费播放| 亚洲欧洲成人精品香蕉网| 久久精品一区二区免费看| 亚洲精品免费观看| 国产免费不卡视频| 亚洲经典千人经典日产| 国产91久久久久久久免费| 国产精品永久免费| 亚洲网址在线观看你懂的| 91手机看片国产永久免费| 亚洲欧美日韩自偷自拍| 亚洲国产精品无码久久九九| 精品成人免费自拍视频| 亚洲欧洲国产经精品香蕉网| 全免费A级毛片免费看网站| 中美日韩在线网免费毛片视频| 国产V亚洲V天堂A无码| 亚洲视频免费在线看| 人妻巨大乳hd免费看| 国产亚洲综合网曝门系列| 亚洲成年人免费网站| 亚洲AV无码之国产精品| 亚洲色欲久久久综合网东京热| 97在线视频免费公开观看| 亚洲乱码中文字幕在线| 中国亚洲女人69内射少妇| 5555在线播放免费播放| 国产亚洲精品成人久久网站 | 亚洲性在线看高清h片| 亚在线观看免费视频入口|