ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美成a人片在线观看久,日韩精品一区二区在线观看,少妇在线看wwwhttp://www.aygfsteel.com/pandawang/zh-cnFri, 04 Jul 2025 23:49:34 GMTFri, 04 Jul 2025 23:49:34 GMT60Winsock 10053错误分析http://www.aygfsteel.com/pandawang/archive/2013/11/28/406922.htmlLong Long AgoLong Long AgoThu, 28 Nov 2013 03:22:00 GMThttp://www.aygfsteel.com/pandawang/archive/2013/11/28/406922.htmlhttp://www.aygfsteel.com/pandawang/comments/406922.htmlhttp://www.aygfsteel.com/pandawang/archive/2013/11/28/406922.html#Feedback1http://www.aygfsteel.com/pandawang/comments/commentRss/406922.htmlhttp://www.aygfsteel.com/pandawang/services/trackbacks/406922.htmlWinsock 10053错误分析

 WSAGetLastError可能ä¼?x¨¬)è¿”å?/span>10053错误åQŒæŸ¥msdn的解释是åQ?/span>

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.

¼œžé©¬åQŸèÊY件原因造成的连接中断,˜q™æ˜¯ä»€ä¹ˆæ„æ€ï¼Œä¸è·Ÿæ²¡è¯´ä¸€æ ïL(f¨¥ng)š„么?
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).

 

伯克利说˜q™ç§˜qžæŽ¥ä¸­æ–­æ˜¯å› ä¸ºå®¿ä¸ÀLœºå™¨çš„内部原因åQŒå› ä¸ø™ÊY件导致的˜qžæŽ¥ä¸­æ–­åQŒå¯èƒ½æ˜¯å› äØ“(f¨´)socket的队列满òq¶ä¸”˜q™ä¸ªsocket不能接收更多的连接了(ji¨£n)ã€?br /> ˜q™è¿˜ä¸å¦‚不说åQŒè¶Šè¯´è¶Š¾pŠæ¶‚äº?ji¨£n)ã€?br /> winsocket的描˜qŽÍ¼Œä¼ég¹Ž˜q˜é è°×ƒ¸€äº›ï¼Œ˜q™ç§é”™è¯¯ä¸€èˆ¬å‘生在一个徏立的˜qžæŽ¥è¢«é‡å‘失败的情况下äñ”生,接收æ–ÒŽ(gu¨©)²¡æœ‰å“åº”数据发回来。但˜q˜æ˜¯æ¯”较模糊ã€?br /> 再看看tcp ip标准文档的说法,如果本地¾pȝ»Ÿæ²¡æœ‰æ”¶åˆ°å‘送数据的响应åQˆackåQ‰é‚£ä¹ˆè¿™˜qžæŽ¥ž®×ƒ¼š(x¨¬)­‘…时。如果tcpçš„fin包没有被ackåQˆæˆ–者f(xi¨¦)in包被ackäº?ji¨£n)但fin没有˜q”回åQ‰é‚£ä¹ˆä¹Ÿä¼?x¨¬)超时。但是,但是åQŒè¶…æ—¶è·Ÿ˜q™ä¸ª10053有神马关¾p»ï¼Ÿ
再看后箋的解释:(x¨¬)
从参è€?中找到如下的描述åQ?/span>

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!".

 

啊哈åQŒåˆæœ‰httpäº?ji¨£n),大概意思就是http server收到è¯äh±‚äº?ji¨£n),但发现有问题åQŒé‚£ä¹ˆå›žä¸€ä¸ªhttp错误码,然后ž®±å…³é—­äº†(ji¨£n)socketåQŒä½†ä¸Žæ­¤åŒæ—¶åQŒclient端还在很开å¿?j¨©)地向socket写数据,注意哦,tcp是全双工的。client写完毕后åQŒå®žé™…上数据只是攑ֈ°äº?ji¨£n)发送方的缓冲区中,不一定已¾lå‘出去äº?ji¨£n),如果写得不好的程序,˜q™ä¸ªæ—¶å€™å°±å¼€å§‹ä»Žsocketè¯ÀL•°æ®äº†(ji¨£n)åQŒè¿™æ—¶å€™å°±ä¼?x¨¬)äñ”生一个WSACONNECTABORTED错误åQŒwindows上对应的ž®±æ˜¯10053错误ã€?/span>

但这个解释实际上是不能让人满意的åQŒåªæ˜¯ä‹Då‡ÞZº†(ji¨£n)一¿Uåœºæ™¯ï¼Œä½†äØ“(f¨´)什么会(x¨¬)产生˜q˜æ²¡æœ‰è§£é‡Šã€‚后面又搜到äº?ji¨£n)个参è€?åQŒé¦–先解é‡?0053错误是收到fin后clientä¼?x¨¬)放弃发送缓冲区中的数据åQŒåŒæ—¶ä¸ŠæŠ¥é”™è¯¯ã€‚虽然说法还有点一头雾水ã€?/span>

不过˜q™ä¸¤ä¸ªå‚考给我们一个思èµ\åQŒé‡çŽ°è¿™ä¸ªé—®é¢˜ã€?/span>

于是½Ž€å•写个测试用的c-s½E‹åºåQŒå¤§æ¦‚流½E‹å¦‚ä¸?/span>

 

 

å›? CS½E‹åº½Ž€åŒ–流½E‹å›¾

˜q™ä¸ª½Ž€å•程序演½Cºå¦‚何出çŽ?0053错误åQˆä»¥å?0054错误åQ‰ã€?/span>

如果server在收到client发送的数据后立卛_…³é—­socketåQŒé‚£ä¹ˆclient再读æ—Óž¼Œä¼?x¨¬)æ”¶å?0053错误åQ›å¦‚æžœserver收到发送数据后åQŒç«‹å³crashåQŒé‚£ä¹ˆéšåŽclient再读取时ä¼?x¨¬)æ”¶å?0054错误ã€?/span>

okåQŒèƒ½å¤Ÿé‡çŽ°åœºæ™¯äº†(ji¨£n)åQŒé‚£ä¹ˆæˆ‘们来分析一下更¾l†èŠ‚çš„æ–¹é¢ï¼Œ¾|‘络问题自然是抓包,本问题处理抓包还要看一下tcp的状态以便辅助分析,我们在client端每‹Æ¡æ“ä½œä¹‹å‰éƒ½æ‰“印当前的tcp状态ã€?/span>

下面是client端发送记录和对应的netstat情况

� 10053错误client端tcp状态流�/span>

client在发送之前tcp状态是establishedåQŒåœ¨å‘送之后,serverä¼?x¨¬)立卛_…³é—­ï¼ŒtcpçŠ¶æ€ä¹Ÿå˜äØ“(f¨´)close_waitåQŒä½†˜q™åªæ˜¯å•方向的关闭,client可以¾l§ç®‹å‘数据,但client发送后åQŒserver立即退å‡ÞZº†(ji¨£n)åQŒå¯¼è‡´åŽ¾l­recvä¼?x¨¬)å¤±è´¥åÆˆä¸”è¿”å?0053。对应抓包情况如下:(x¨¬)



� 10053错误client端tcp抓包

整个通信˜q‡ç¨‹å¦‚下åQ?br /> 1-3.三次握手建立˜qžæŽ¥
4.客户端(10.10.86.93åQ‰å‘服务器端åQ?0.10.86.98åQ‰å‘送数据,1字节
5.server 中止 发送fin(同时ack之前那个pushåQ?br /> 6.client ack 那个fin
7.client再发送两个字èŠ?br /> 8.server此时已经关闭socketåQŒå±žäºŽéžæ­£å¸¸æƒ…况åQŒå›žå¤å¤ä½å‘½ä»?br />
整个˜q‡ç¨‹å¯ä»¥é‡çް10053情况åQŒtcp发送分¾l„数据的情况也一目了(ji¨£n)ç„?d¨°ng)ž¼Œäº‹æƒ…到此ž®±å¯ä»¥äº?ji¨£n)么?昄¡„¶ä¸æ˜¯åQŒä½ ä¹Ÿçœ‹åˆîCº†(ji¨£n)后面˜q˜æœ‰å¾ˆå¤šæ–‡å­—åQŒä¸çŸ¥æ­¤æ—¶ä½ å¿?j¨©)ä¸­çš„é—®é¢˜æ˜¯å¦è·Ÿæˆ‘ä¸€æ øP¼Œå…ˆè¯´æˆ‘自å·Þqš„吧,通过抓包发现˜q™é‡Œçš„异常关闭有个resetåQŒä½†reset一般是10054åQˆConnection reset by peeråQ‰çš„错误åQŒé‚£ä¹?0053ä¸?0054的区别在哪里。要搞清楚问题也不难åQŒé‡çŽ°åœºæ™¯æŠ“åŒ…åˆ†æžã€?br /> 以下是修改上面的cs½E‹åºåQŒåœ¨client发送的1字节包后åQŒç«‹å³crashåQŒè¿™å¯ÆD‡´çš„问题是操作¾pȝ»Ÿä¼?x¨¬)立卛_›žæ”¶æ‰€æœ‰èµ„源,包括socket资源ã€?/span>




� 10054错误client端tcp状态流�/span>

可以看到在crash之前˜q™ä¸ªtcp都是established状态。crash之后åQŒclient端接收数据时ä¼?x¨¬)æ”¶å?0054错误åQŒåœºæ™¯é‡çŽîCº†(ji¨£n)åQŒæˆ‘们再看一下抓包情å†?/span>



� 10054错误client端tcp抓包

˜q™ä¸ªæŠ“包情况è·?0053很像åQ?-7也同10053åQŒåœ¨8æ—Óž¼Œclient收到server发过来的resetåQŒè¡¨½Cºå½“前连接被强制复位äº?ji¨£n)ã€?br /> å¯ÒŽ(gu¨©)¯”10053å’?0054可以发现åQŒå¦‚æžœsrv˜q”回fin标志后再reset那么对应的错误就æ˜?0053åQŒå¦‚果直接resetž®±æ˜¯10054错误。回˜q‡å¤´æ¥åœ¨çœ‹å‚è€?中的说法也就有点感觉äº?ji¨£n)ã€?br />
æ€È»“一下:(x¨¬)
1.遇到不了(ji¨£n)解的问题åQŒgoogle是非常好的方æ³?br /> 2.对于一般问题,重现之很重要åQŒå¯ä»¥åå¤å‘çŽ°é—®é¢˜åÆˆéªŒè¯é—®é¢˜ã€‚è‡ªå·±å†™½E‹åºæˆ–者搭环境?y¨­u)®½é‡é‡çްã€?br /> 3.¾|‘络问题抓包是利器,包括各种工具的ä‹É用netstat wireshark ping traceroute½{‰ã€?br /> 4.多重问题å¯ÒŽ(gu¨©)¯”其中的差异,˜q™é‡Œå¯ÒŽ(gu¨©)¯”10053错误å’?0054错误ã€?br /> 5.理论基础要搭好,本次问题主要是tcp的异常断开问题åQŒç†Ÿæ‚(zh¨¨n)‰tcp断开的半关闭和复位逻辑åQŒä¸˜q‡ç†è®ø™¿˜æ˜¯ç†è®ºï¼ŒåŒæ ·æ˜¯å¤ä½åœ¨ä¸åŒåœºæ™¯ä¸‹çš„é”™è¯¯ç ä¸åŒã€‚åÆˆä¸”å®žçŽîC¸Šä¹Ÿè·Ÿå…·ä½“的操作系¾lŸç›¸å…Ÿë€?br />6.实际工作中,
10053错误æ—Óž¼Œç”¨æˆ·ä¸»è¦æ˜¯å¤„于透明代理情况åQŒé‚£ä¹ˆè¿™ä¸€èˆ¬æ˜¯åˆæœ‰ç”¨æˆ·æ‰€åœ¨çš„代理服务器异常关闭导致的åQŒå¯èƒ½è·Ÿæˆ‘们的离¾U¿æ–‡ä»¶ç§æœ‰åè®®è¢«ç”¨æˆ·æ‰€åœ¨çš„代理服务器拒¾læŽ‰å¯ÆD‡´çš„ã€?/span>

7.回过头来在看一开始的解释åQŒæ‰€è°“èÊY件原因造成的连接终端,ž®±æ˜¯æœ¬ä¾‹å­ä¸­åQŒserver端在shoutdown本方向传输时åQŒç«‹å›_…³é—­äº†(ji¨£n)socketåQŒå¯¼è‡´æœ¬åº”该½{‰å¾…å¯ÒŽ(gu¨©)–¹å‘送fin来完全结束的正常逻辑被打ç ß_(d¨¢)¼Œ¾~–程单方向强制中止本‹Æ¡tcpåQŒå¯¼è‡´client端之后向上报错,ž®±æ˜¯æ‰€è°“çš„10053错误äº?ji¨£n),˜q™é‡Œçš„èÊY件就是server端的那个½E‹åºã€‚(不过也有¿Uè¯´æ³•是åQŒå®¢æˆïL(f¨¥ng)«¯å‘é€é”™è¯¯æ•°æ®ï¼Œå¯ÆD‡´server端保护机制而强制关闭)(j¨ª)


参考:(x¨¬)

  1. http://www.chilkatsoft.com/p/p_299.asp   
  2. http://bbs.csdn.net/topics/360024280#post-361829232
  3. 《TCP/IP详解åQˆå·ä¸€åQ‰ã€?8ç«?TCP˜qžæŽ¥çš„徏立和中止

 

 



]]>
libcurl只编译生成支持http协议http://www.aygfsteel.com/pandawang/archive/2013/11/21/406647.htmlLong Long AgoLong Long AgoThu, 21 Nov 2013 12:40:00 GMThttp://www.aygfsteel.com/pandawang/archive/2013/11/21/406647.htmlhttp://www.aygfsteel.com/pandawang/comments/406647.htmlhttp://www.aygfsteel.com/pandawang/archive/2013/11/21/406647.html#Feedback0http://www.aygfsteel.com/pandawang/comments/commentRss/406647.htmlhttp://www.aygfsteel.com/pandawang/services/trackbacks/406647.html下蝲åQŒå¦‚果不需要最新的åQŒé‚£ä¹ˆåªè¦ä¸‹è½½ä¸ªzip包就好了(ji¨£n)ã€?br />通过download wizard可以指引你下载不同的版本åQ?a >http://curl.haxx.se/dlwiz/
选择source code - òq›_°æ— å…³- 扑ֈ°æœ€æ–°ç‰ˆæœ¬ä¸‹è½½ï¼Œè§£åŽ‹¾~?br />¾~–译比较½Ž€å•有build指ä×o(h¨´)
不过我从vs目录下找åˆîC¸€ä¸?005版本的vcprojæ–‡äšgåQŒç”¨˜q™ä¸ªä¹Ÿå¯ä»¥ç¼–译,不过要设¾|®ä¸€ä¸‹include目录ä¸?./../../include
 ä¸Šé¢æ˜¯åºŸè¯äº†(ji¨£n)åQŒå…³é”®çš„æ€Žä¹ˆå€¼ç”Ÿæˆå¯¹http的支持呢
只要在编译指令中增加定义HTTP_ONLY宏就可以äº?ji¨£n),ž®Þp¿™ä¹ˆç®€å•ã€?br />详细说明在这é‡?a >http://curl.haxx.se/docs/install.html

]]>
zz路由器èÊY仉™ƒ¨åˆ†çš„几个概念åQšCFE、固ä»?Firmware)、NVRAMhttp://www.aygfsteel.com/pandawang/archive/2013/11/13/406310.htmlLong Long AgoLong Long AgoWed, 13 Nov 2013 12:34:00 GMThttp://www.aygfsteel.com/pandawang/archive/2013/11/13/406310.htmlhttp://www.aygfsteel.com/pandawang/comments/406310.htmlhttp://www.aygfsteel.com/pandawang/archive/2013/11/13/406310.html#Feedback0http://www.aygfsteel.com/pandawang/comments/commentRss/406310.htmlhttp://www.aygfsteel.com/pandawang/services/trackbacks/406310.html路由器èÊY仉™ƒ¨åˆ†çš„几个概念åQšCFE、固ä»?Firmware)、NVRAM
CFE的作用跟PCçš„BIOS一æ äh˜¯è´Ÿè´£å¼•导操作¾pȝ»Ÿçš„ï¼›å›ÞZšgž®±æ˜¯è·¯ç”±å™¨çš„æ“ä½œ¾pȝ»ŸåQŒå°±åƒPC上的Windowsä¸€æ øP¼›NVRAM则用于存储èµ\由器的设¾|®ï¼Œç›¸å½“于PCçš„CMOSã€?br />当èµ\由器插上ç”?sh¨´)后自动˜q›å…¥CFEåQŒCFE˜q›è¡Œ¾cÖM¼¼PCçš„BIOS那样˜q›è¡Œè‡ªæ£€åQŒè‡ª‹‚€(g¨¨)通过后就引导路由器的å›ÞZšgäº?ji¨£n)(相当于的PCçš„Windowsäº?ji¨£n)ï¼?j¨ª)åQŒæ­£å¸¸æƒ…况下最多一分钟路由器的å›ÞZšgž®×ƒ¼š(x¨¬)引导完毕åQŒåƈ且Powerç¯æ˜¯å¸æ€º®çš„。如果Power灯一闪一闪,那一般是CFE没有引导成功路由器的å›ÞZšgåQˆå›ºä»¶ä¸å­˜åœ¨ã€ä¸æ­£ç¡®ã€å·²æŸå½{‰ç­‰åQ‰ã€?br />那么我们òq›_¸¸åˆ·å›ºä»¶ä¼š(x¨¬)把CFE也刷äº?ji¨£n)吗åQŸå‘µå‘µï¼Œä¸ä¼š(x¨¬)的,ž®±åƒä½ åã^时装Windowsä¸€æ øP¼Œä¸ç®¡ä½ æ˜¯è£…XP也好åQŒVista也好åQŒW(xu¨¦)in7也好åQŒéƒ½ä¸ä¼š(x¨¬)对你的BIOS˜q›è¡Œæ›´æ–°ã€‚那我想刷CFE该用什么方法?一般用æˆïL(f¨¥ng)”¨è·¯ç”±å™¨åŽŸåŽ‚çš„CFE卛_¯åQŒå¦‚果要玩的深入一些想刷CFEåQŒé‚£ä¹ˆå¯ä»¥é€šè¿‡JTAG或者telnet方式来刷åQˆæ¯”较危险,而且受固仉™™åˆÓž¼Œæœ‰äº›å›ÞZšg不支持)(j¨ª)ã€?br />主要是对¼‹¬äšg环境˜q›è¡Œåˆå§‹åŒ–,image的更斎ͼŒåŠ è²kernel½{?/pre>

]]>
回来äº?/title><link>http://www.aygfsteel.com/pandawang/archive/2010/10/30/336546.html</link><dc:creator>Long Long Ago</dc:creator><author>Long Long Ago</author><pubDate>Sat, 30 Oct 2010 05:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/pandawang/archive/2010/10/30/336546.html</guid><wfw:comment>http://www.aygfsteel.com/pandawang/comments/336546.html</wfw:comment><comments>http://www.aygfsteel.com/pandawang/archive/2010/10/30/336546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/pandawang/comments/commentRss/336546.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/pandawang/services/trackbacks/336546.html</trackback:ping><description><![CDATA[好久没有更新˜q™ä¸ªblogäº?ji¨£n),java也放下了(ji¨£n)è®æ€¹…。现在开始重新更新本blog <img src ="http://www.aygfsteel.com/pandawang/aggbug/336546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/pandawang/" target="_blank">Long Long Ago</a> 2010-10-30 13:44 <a href="http://www.aygfsteel.com/pandawang/archive/2010/10/30/336546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JXTA学习(f¨¤n)½W”è®°åQ?åQ‰â€”—JXTA的各¿Uæ¦‚å¿?/title><link>http://www.aygfsteel.com/pandawang/archive/2007/05/19/118606.html</link><dc:creator>Long Long Ago</dc:creator><author>Long Long Ago</author><pubDate>Sat, 19 May 2007 15:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/pandawang/archive/2007/05/19/118606.html</guid><wfw:comment>http://www.aygfsteel.com/pandawang/comments/118606.html</wfw:comment><comments>http://www.aygfsteel.com/pandawang/archive/2007/05/19/118606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/pandawang/comments/commentRss/118606.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/pandawang/services/trackbacks/118606.html</trackback:ping><description><![CDATA[本文主要介绍äº?ji¨£n)JXTA中的各种概念ã€?br>1.<span style="font-weight: bold;">Peerã€?/span>一个peerž®±æ˜¯å®žçްäº?ji¨£n)一个或多个JXTA协议的网¾lœè®¾å¤‡ã€‚比如传感器åQŒç”µ(sh¨´)话, PDAåQŒPCåQŒæœåС噍åQŒå·¨åž‹æœº½{‰ç­‰ã€‚每一个peer与其他peer都是独立操作òq¶ä¸”是异步的。有peer ID来唯一标识一个peer。peer使用JXTA协议公开一个或多个¾|‘络接口åQˆnetwork interfaceåQ‰ï¼Œæ¯ä¸€ä¸ªå…¬å¼€çš„æŽ¥å£éƒ½è¢«å¹¿å‘ŠäØ“(f¨´)一个peer端点(peer endpoint),˜q™ä¸ªpeer端点唯一标识äº?ji¨£n)一个网¾lœæŽ¥å£ã€‚peer之间不需要有直接的点对点的网¾lœè¿žæŽ¥ã€‚可以ä‹É用中间的peerä½œäØ“(f¨´)peer的消息èµ\由,ž®†ç”±äºŽç¡¬ä»¶ç½‘¾lœæˆ–者网¾lœé…¾|®ï¼ˆNATsåQŒé˜²ç«å¢™æˆ–者代理)(j¨ª)而造成的两个通信peer˜q›è¡Œäº’联。peer通常被设计成¾|‘络中自然地互相发现åQŒä»Žè€Œæž„æˆæš‚æ—¶çš„æˆ–æŒä¹…çš„å…³ç³»æˆäØ“(f¨´)peer¾l„(peer gorupåQ‰ã€?br>2.<span style="font-weight: bold;">Peer Group</span>.一个peer¾l„是一个peer的集合,˜q™äº›peer都有一¾l„相同的服务。peer自组¾l‡çš„加入到peer¾l„中åQŒåƈ通过一个唯一的peer¾l„id来区别这些peer¾l„。每一个peer¾l„都可以建立一个属于自å·Þqš„memebership policyåQŒä»Žä»ÖM½•人可以加入到最严格的安全验证以å?qi¨¢ng)受保护方式åQˆéœ€è¦å®Œå…¨çš„认证书来加入åQ‰ã€‚一个peer可以同时属于多于一个peer¾l„。默认地åQŒç¬¬ä¸€ä¸ªpeer¾l„被实例的组是Net Peer Group。所有的peer都属于Net Peer Group。peer可以选择加入其他的peer group。JXTA协议描述äº?ji¨£n)peer如何公开åQŒå‘玎ͼŒåŠ å…¥ä»¥åŠ(qi¨¢ng)监控peer¾l„ã€?br>     如下几点说明äº?ji¨£n)创建peer¾l„的目的ã€?br> <ol> <li>建立安全的环境。peer¾l„可以创å»ÞZ¸€ä¸ªæœ¬åœ°æŽ§åˆ¶åŸŸåQŒåœ¨˜q™ä¸ªåŸŸä¸­ä½¿ç”¨ä¸€ä¸ªç‰¹å®šçš„安全½{–略。这个安全策略可以简单的只是一个明文的帐号 /口ä×o(h¨´)交换åQŒä¹Ÿå¯ä»¥åƒPKI一æ ähˆç†Ÿã€‚peer¾l„界定认证的成员讉K—®å’Œå…¬å¼€å—保护的内容åQˆcontentåQ‰ã€‚peer¾l„在建立äº?ji¨£n)一个逻辑上的区域åQŒä»Žè€Œå¯¹è®‰K—®peer¾l„的资源˜q›è¡Œç•Œå®šã€?/li> <li>创徏一个范围环境。peer¾l„裕兴徏立一个本地的专用域。比如,peer可以¾l„织èµäh¥å®žçŽ°ä¸€ä¸ªæ–‡æ¡£å…±äº«ç½‘¾lœæˆ–者一个CPUå…׃ín¾|‘络ã€?peer¾l„提供细分网¾lœæˆæŠ½è±¡çš„区域来提供内在范围机制åQˆimplicit scoping mechanismåQ‰ã€‚比如,当搜索一个组内容的时åQŒpeer¾l„可以界定定义一个搜索范围ã€?/li> <li>创徏一个监视环境。peer¾l„å…è®æ€¸€ä¸ªpeerä¸ÞZº†(ji¨£n)ä»ÖM½•目的åŽÈ›‘视一¾l„peeråQˆæ¯”如,å¿?j¨©)蟩åQŒtraffic introspection或者accountabilityåQ‰ã€‚peer¾l„也可以构徏一个父子层‹Æ¡ç»“构,其中ä»ÖM½•一个组都有一个唯一的父二Ӏ‚查询请求能偶在˜q™ä¸ª¾l„中传播。对于这个组中的òq¿å‘Šä¹Ÿå¯ä»¥åœ¨å…¶çˆ¶¾l„中公开åQŒå½“然也包裹˜q™ä¸ª¾l„本íw«ã€?/li> </ol> peer¾l„提供了(ji¨£n)一¾l„服务成为peer¾l„服务。在JXTA中敌营了(ji¨£n)一个核å¿?j¨©)peer¾l„服务集合。两个peer如果要通过一个服务进行交互,他们配需位于同一个peer中ã€?br>    核心(j¨©)的组服务有如下:(x¨¬)<br> <ol> <li>发现服务åQˆDiscovery ServiceåQ‰ã€‚本服务被组中的peer用来查询per¾l„资源,比如peeråQŒpeer¾l„,通道和服务等ã€?/li> <li>成员关系服务åQˆMembership ServiceåQ‰ã€‚本服务被当前成员用来拒¾læˆ–接受一个新的组成员应用。一个peer惌™¦åŠ å…¥åˆîC¸€ä¸ªgroup前,首先要确定一个当前的成员åQŒåƈè¯äh±‚加入。当前成员的集合可以拒绝或者接受某个想加入的应用(applicationåQ‰ã€‚本服务可能ä¼?x¨¬)发起一个所有peer或者指定组代表的一‹Æ¡æŠ•¼œ¨æ¥å†›_®šæ˜¯å¦æŽ¥å—或者聚居新的成员应用ã€?/li> <li>讉K—®æœåŠ¡åQˆAccess ServiceåQ‰ã€‚ä‹É用访问服务可以用来验证一个peer对另一个peer的请求(requeståQ‰ã€‚如果访问被允许åQŒé‚£ä¹ˆæŽ¥å—请求的peerä¼?x¨¬)提供给è¯äh±‚peer关于该请求所要知道的信息的信ä»Õd’Œç›¸å…³ä¿¡æ¯ã€‚(注意åQŒåœ¨peer¾l„中åQŒä¸æ˜¯æ‰€æœ‰çš„è¡ŒäØ“(f¨´)åQˆactionåQ‰éƒ½éœ€è¦é€šè¿‡è®‰K—®æœåŠ¡çš„æ£€æŸ¥ï¼Œåªæœ‰é‚£äº›åœ¨æŸäº›peer中被限制的行为在需要调用时åQŒæ‰è¢«æ£€æŸ¥ã€‚)(j¨ª)</li> <li>½Ž¡é“服务åQˆPipe ServiceåQ‰ã€‚本服务用于在peer¾l„成员间的链接管道的建立和管理ã€?/li> <li>Resolver服务。本服务用来发送一般的查询è¯äh±‚到其他的peer。peer可以定义和交换请求以便发çŽîC“Q何需要的信息åQˆæ¯”如一个服务的状态或者一个管道端点的信息。)(j¨ª)</li> <li>监视服务(Monitoring Service)。本服务用来让一个peer监视本组中的其他成员服务ã€?/li> </ol>     不是所有上面提到的服务都必™å»è¦è¢«æ¯ä¸ªpeer实现。一个peer¾l„可以自ç”Þqš„实现那些它认为有用的服务åQŒåƈ可以依赖于默认的Net Peer Group来提供非关键核心(j¨©)服务的一般实现ã€?br>3.<span style="font-weight: bold;">Network Services</span>。peer之间可以协作òq‰™€šä¿¡ä»¥å‘布,发现和启动网¾lœæœåŠ¡ã€‚peer可以发布多个服务。peer通过Peer Discovery Protocol来发现network service。在JXTA协议中组¾l‡äº†(ji¨£n)两个层次上的network serviceã€?br> <ul> <li>Peer Service。一个peer service只有当peer公布äº?ji¨£n)自å·Þqš„service时才能被讉K—®ã€‚如果这个peerå¤ÞpÓ|äº?ji¨£n),那么它的service也失败了(ji¨£n)。不同的peer可以˜qè¡ŒæŸä¸ªæœåŠ¡çš„å¤šä¸ªå®žä¾‹ï¼Œä½†æ¯ä¸ªå®žä¾‹éƒ½å¿…é¡»å…¬å¼€è‡ªå·±çš„å¹¿å‘?advertisement).</li> <li>Peer Group Service。peer¾l„服务是˜q™ä¸ª¾l„中成员所˜qè¡ŒæœåŠ¡çš„å®žä¾‹çš„é›†åˆçš„ç»„¾l‡åŞ式,其中˜q™äº›å®žä¾‹æ˜¯äº’相合作的。如果其中ä“Q何一个peerå¤ÞpÓ|äº?ji¨£n),那么˜q™ä¸ª peer¾l„服务将不会(x¨¬)收到影响åQˆå‡å®šè¿™ä¸ªæœåŠ¡å¯ä»¥ä»Žå…¶ä»–peer获得åQ‰ã€‚peer group服务通过peer ¾l„广告的以部分来发布ã€?/li> </ul>     服务可以是事先被安装到peer上或者通过¾|‘ç»œå®‰è£…çš„ã€‚äØ“(f¨´)äº?ji¨£n)真正的˜qè¡Œä¸€ä¸ªæœåŠ¡ï¼Œpeer必须为定位一个适合当前peer˜qè¡ŒçŽ¯å¢ƒçš„ä¸€ä¸ªå®žçŽ°ã€‚è¿™ä¸ªä»Ž¾|‘络上查找,下蝲和安装一个服务的˜q‡ç¨‹å¾ˆç±»ä¼égºŽåœ¨Internet上搜索一个Web™åµé¢åQŒå–回这个页面然后再安装需要的插äšg的过½E‹ã€?br> 4.<span style="font-weight: bold;">Modules</span>。JXTAçš„module用来描述ä»ÖM½•一ŒD는¨æ¥å®žçްJXTA world中一个行为的“代码”的抽象表½Cºï¼ˆAbstractionåQ‰ã€‚Network Servicež®±æ˜¯åœ¨ä¸€ä¸ªpeerä¸Šå®žçŽ°çš„è¡ŒäØ“(f¨´)的一个最一般的例子。这个Module Abstraction不一定特指什ä¹?#8220;代码”åQŒå®ƒå¯ä»¥æ˜¯ä¸€ä¸ªJava¾c»ï¼Œä¹Ÿå¯ä»¥æ˜¯Java jaråQŒæˆ–者动态链接库dllåQŒä¸€ä¸ªXML消息或是一个脚本。这个module的行ä¸ÞZº¤¾l™äº†(ji¨£n)module的实现者。对于一个实例(instanceåQ‰ï¼Œ module表示äº?ji¨£n)一个网¾lœæœåŠ¡ï¼ˆnetwork serviceåQ‰åœ¨ä¸åŒòq›_°ä¸Šçš„不同实现åQŒè¿™äº›åã^台比如说在javaòq›_°åQŒMS windowsòq›_°åQŒSolaris òq›_°ã€?br>    Module允许peer实现一个新的行为,通过提供äº?ji¨£n)一个一般的抽象。当peer‹¹è§ˆæˆ–者加入一个peer¾l„æ—¶åQŒä»–可以查找新的其打½Ž—å®žçŽ°çš„è¡ŒäØ“(f¨´)。比如,当加入一个peer¾l„后åQŒä¸€ä¸ªpeer可能必须学习(f¨¤n)新的搜烦(ch¨³)服务åQŒè¿™ä¸ªæœåŠ¡åªèƒ½åœ¨æœ¬peer¾l„ä¸­ä½¿ç”¨ã€‚äØ“(f¨´)äº?ji¨£n)加入到˜q™ä¸ª¾l„,˜q™ä¸ªpeer必须实现˜q™ä¸ªæ–°çš„æœçƒ¦(ch¨³)服务。这个module框架可以启动òq›_°æ— å…³è¡ŒäØ“(f¨´)的表½Cºï¼ˆrepresentationåQ‰å’Œòq¿å‘ŠåQˆadvertisementåQ‰ã€‚åÆˆå…è®¸peer描述和实çŽîC“Q何åŞ式这个行为(behavioråQ‰çš„æ˜¯å®žçŽ°ã€‚æ¯”å¦‚ï¼Œä¸€ä¸ªpeer使用java或者c实现一个行为的实现ã€?br>& amp; nbsp;   描述和公告一个åã^å°ç‹¬ç«‹çš„è¡ŒäØ“(f¨´)的能力能有有效的支持peer¾l„包含异构的peer。module的广告可以ä‹ÉJXTAçš„peer能够采用òq›_°ç‹¬ç«‹çš„æ–¹å¼æ˜qîC¸€ä¸ªè¡Œä¸ºã€‚JXTAòq›_°ä½¿ç”¨moduleòq¿å‘Šæ¥è‡ªæè¿°ã€?br>    module抽象åQˆModule abstractIonåQ‰åŒ…括一个module classåQŒmodule specification和一个moduleimplementationã€?br> <ul> <li>Module Class。module class主要用于òq¿å‘Šä¸€ä¸ªè¡Œä¸ºï¼ˆbehavioråQ‰çš„存在。这个class的定义表˜qîCº†(ji¨£n)ä¸€ä¸ªæœŸæœ›çš„è¡ŒäØ“(f¨´)和一个期望的å¯ÒŽ(gu¨©)‰€æ”¯æŒçš„module的绑定。每一个module class都有一个唯一的IDåQŒæˆä¸ºMoudleClassID</li> <li>Module Specification。Module Specification主要用于讉K—®˜q™ä¸ªmodule。它包含äº?ji¨£n)访问或者启动这个module的所有必要的信息。比如,一个服务,他的module specification可能包含äº?ji¨£n)一个用于和其他服务盔R€šä¿¡çš„管道的òq¿å‘Šã€‚一个module specification用于提供module class所指明的功能。对于一个module class可能有多个module specification。每一个module specification都有一个唯一的idåQŒModuleSpecID。ModuleSpecID包含äº?ji¨£n)ModuleClass IDåQŒåƈ指明äº?ji¨£n)所使用的module class。一个module specification暗含äº?ji¨£n)对¾|‘络的兼å®ÒŽ(gu¨©)€§ã€‚对于一个给定的module specification的所有实现都必须使用相同的协议,˜q™äº›å®žçŽ°éƒ½éœ€è¦æ˜¯å…¼å®¹çš„ï¼Œå³ä‹É使用不同的语­a€å®žçŽ°çš„ã€?/li> <li>Module Implementation。Module Implement是一¾l™å®šmodule specification的实现。对于一个module specification可以有多个module implementation。每一个module implementation都包含了(ji¨£n)它所实现的与specification相关联的ModuleSpecIDã€?/li> </ul>     Module可以被peer¾l„服务ä‹É用,也可以被独立的服务所使用。JXTA服务通过module abstraction来区别存在的服务åQˆä»–çš„Module ClassåQ‰ï¼ŒæœåŠ¡çš„specificationåQˆModule SpecificationåQ‰ï¼Œæˆ–者服务的实现åQˆService ImplementationåQ‰ã€‚所有的˜q™äº›éƒ½æœ‰ä¸€ä¸ªè”合的òq¿å‘ŠåQŒåƈ且可以通过其他JXTA peer来公告和发现的。作ä¸ÞZ¸€ä¸ªä¾‹å­ï¼Œè€ƒè™‘JXTA的发现服务。它包含一个唯一的ModuleClassIDåQŒæ ‡è¯†äº†(ji¨£n)他作ä¸ÞZ¸€ä¸ªå‘现服务——他的抽象功能。对于这个发现服务可以有多个不同的规范(SpecificationåQ‰ï¼Œòq¶ä¼´éšç€ä¸åŒçš„实现。对于组的大ž®å’Œåœ¨ç½‘¾lœä¸­çš„传播方式可以ä‹É用不同的裁剪½{–略。每一个Specification都有唯一的MdouleSpecIDåQŒå…¶ä¸­æŒ‡æ˜Žäº†(ji¨£n)发现发现服务的ModuleClassID。对于每个规范,都可能有多种实现åQŒæ¯¿Uå®žçŽ°éƒ½åŒ…å«äº?ji¨£n)相同的ModuleSpceIDã€?br>    æ€ÖM¹‹åQŒå¯¹äºŽä¸€ä¸ªç»™å®šçš„module Class都可能有多种规范åQŒè¿™äº›è§„范可能是完全不同的。然而ä“Q何给定规范的所有实现都是假定可以互相兼容的ã€?br><img src ="http://www.aygfsteel.com/pandawang/aggbug/118606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/pandawang/" target="_blank">Long Long Ago</a> 2007-05-19 23:11 <a href="http://www.aygfsteel.com/pandawang/archive/2007/05/19/118606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JFace的作为Java Application使用http://www.aygfsteel.com/pandawang/archive/2007/05/17/118079.htmlLong Long AgoLong Long AgoThu, 17 May 2007 06:33:00 GMThttp://www.aygfsteel.com/pandawang/archive/2007/05/17/118079.htmlhttp://www.aygfsteel.com/pandawang/comments/118079.htmlhttp://www.aygfsteel.com/pandawang/archive/2007/05/17/118079.html#Feedback2http://www.aygfsteel.com/pandawang/comments/commentRss/118079.htmlhttp://www.aygfsteel.com/pandawang/services/trackbacks/118079.htmlException in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IStatus 错误åQŒè™½ç„¶å·²¾læ·»åŠ äº†(ji¨£n)org.eclipse.jface,org.eclipse.core.runtime,org.eclipse.osgi包,但仍然出错,后来发现org.eclipse.core.runtime.IStatus是在org.eclipse.equonix.common包中åQŒæ·»åŠ åŽå‘çŽ° åQŒè¿˜éœ€è¦æ·»åŠ org.eclipse.core.command包,再添加后搞定ã€?br>

]]>
SWT中的模式和非模式船体åQˆmodal or non-modalåQ?/title><link>http://www.aygfsteel.com/pandawang/archive/2007/05/17/118075.html</link><dc:creator>Long Long Ago</dc:creator><author>Long Long Ago</author><pubDate>Thu, 17 May 2007 06:27:00 GMT</pubDate><guid>http://www.aygfsteel.com/pandawang/archive/2007/05/17/118075.html</guid><wfw:comment>http://www.aygfsteel.com/pandawang/comments/118075.html</wfw:comment><comments>http://www.aygfsteel.com/pandawang/archive/2007/05/17/118075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/pandawang/comments/commentRss/118075.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/pandawang/services/trackbacks/118075.html</trackback:ping><description><![CDATA[    以前实现SWT中的模式和非模式½H—体åQˆmodal or non-modal window )是通过在子½H—体中是否截取父½H—体的消息åó@环来实现的,现在发现˜q™æ ·å¥½åƒä¸è¡Œäº?ji¨£n),但可以通过指定子窗体的样式åQˆstyleåQ‰æ¥åˆ¶å®šå­çª—体是否是模式½H—体ã€?br>Shell child = new Shell(shell,SWT.SHELL_TRIM|SWT.APPLICATION_MODAL); <br>上面的语句指定了(ji¨£n)子窗体child为模式窗体。在上面的style中指定SWT.SHELL_TRIM æ˜¯äØ“(f¨´)äº?ji¨£n)显½Cºçª—体的三个默认按钮åQˆæœ€å¤§ï¼Œæœ€ž®å’Œå…³é—­åQ‰ï¼Œä¹Ÿå¯ä»¥ç”¨SWT.DIALOG_TRIMåQŒä¸˜q‡æ­¤æ—¶äØ“(f¨´)对话框样式,只有一个默认按钮(关闭åQ‰ã€‚默认的Shell是非模式½H—体åQŒåƈ且是有默认系¾lŸæŒ‰é’®çš„åQŒå³æ ·å¼ä¸ºï¼š(x¨¬)SWT.SHELL_TRIM|SWT.MODELESSã€?br>™åÞZ¾¿è¯´ä¸€ä¸‹ï¼Œåœ¨JFaceçš„Dialog中ä‹É用模式对话框只要½Ž€å•的讄¡½®è¯¥å¯¹è¯æ¡†setBlockOnOpen(true)卛_¯ã€?strong><a name="exdialog"></a> <img src ="http://www.aygfsteel.com/pandawang/aggbug/118075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/pandawang/" target="_blank">Long Long Ago</a> 2007-05-17 14:27 <a href="http://www.aygfsteel.com/pandawang/archive/2007/05/17/118075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JXTA学习(f¨¤n)½W”è®°åQ?åQ‰â€”—JXTA的体¾pȝ»“æž?/title><link>http://www.aygfsteel.com/pandawang/archive/2007/05/13/117108.html</link><dc:creator>Long Long Ago</dc:creator><author>Long Long Ago</author><pubDate>Sun, 13 May 2007 06:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/pandawang/archive/2007/05/13/117108.html</guid><wfw:comment>http://www.aygfsteel.com/pandawang/comments/117108.html</wfw:comment><comments>http://www.aygfsteel.com/pandawang/archive/2007/05/13/117108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/pandawang/comments/commentRss/117108.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/pandawang/services/trackbacks/117108.html</trackback:ping><description><![CDATA[    在JXTA中分ä¸ÞZ¸‰ä¸ªå±‚‹Æ¡ï¼Œå¦‚下图所½Cºã€?br><img style="width: 482px; height: 339px;" alt="" src="http://www.aygfsteel.com/images/blogjava_net/pandawang/JXTA/JxtaArchitecture.JPG" align="middle"><br>     下面分别介绍各个层次åQ?br> <ol> <li>òq›_°å±‚(platform layeråQ‰ã€‚åã^台层åÏx‰€è°“çš„JXTA核心(j¨©)åQˆJXTA coreåQ‰ï¼Œä¸“门包装äº?ji¨£n)最ž®æœ€¾_‘֍Žçš„部分,˜q™éƒ¨åˆ†ä¸»è¦å®Œæˆäº†(ji¨£n)对P2P¾|‘络最一般的使用。包括,为P2P应用½E‹åºçš„关键机制构建模块,传输åQˆåŒ…括防火墙½I‰K€ï¼‰(j¨ª)åQŒåˆ›å»ºpeerå’Œpeer group以及(qi¨¢ng)和安全部分的¾l“合ã€?/li> <li>服务层(Service layeråQ‰ã€‚服务层包含äº?ji¨£n)一些网¾lœæœåŠ¡ï¼Œ˜q™äº›æœåŠ¡ä¸ä¸€å®šæ˜¯P2P½E‹åºä¸­å¿…™åȝš„åQŒä½†å´æ˜¯P2P环境中通常和值得提供的。比如搜索,索引åQŒç›®å½•,存储¾pȝ»ŸåQŒæ–‡ä»¶å…±äº«ï¼Œåˆ†å¸ƒå¼æ–‡ä»¶ç³»¾lŸï¼Œèµ„源聚合和租借等应用服务åQŒä»¥å?qi¨¢ng)协议传输服务和认证和PKI服务½{‰ç­‰ã€?/li> <li>应用层(Application layeråQ‰ã€‚应用层包括äº?ji¨£n)综合应用的实现åQŒæ¯”如P2P的及(qi¨¢ng)时消息,文档和资源的å…׃ínåQŒå¨±ä¹å†…容管理和分发åQŒP2Pçš„email¾pȝ»ŸåQŒåˆ†å¸ƒå¼æ‹å–¾pȝ»Ÿä»¥åŠ(qi¨¢ng)很多其他的应用ã€?/li> </ol>     实际上,服务层和应用层之间的界限òq¶ä¸æ˜¯æ˜Žæ˜„¡š„。一个用æˆïL(f¨¥ng)š„应用½E‹åºå¯ä»¥ä½œäØ“(f¨´)另一个用æˆïL(f¨¥ng)š„æœåŠ¡ã€‚æ•´ä¸ªç³»¾lŸè¢«å®žé™…成模块化的,允许开发者选择一个服务和应用的集合来定制自己的需求ã€?br>    在JXTA中有三个主要斚w¢æ˜¯å®ƒåŒºåˆ«ä¸€å…¶ä»–分布式网¾lœæ¨¡åž‹çš„åQ?br> <ol> <li>使用XML文档(òq¿å‘ŠåQ‰æ¥æè¿°¾|‘络资源ã€?/li> <li>针对peeré—´å’Œpeer与端点(endpointåQ‰é—´çš„æŠ½è±¡ç®¡é“(abstraction pipe)不需要ä‹É用一个可信赖的中å¿?j¨©)名å?地址认真åQŒæ¯”如DNSã€?/li> <li>唯一的peer地址æ–ÒŽ(gu¨©)¡ˆåQˆpeer IDsåQ‰ã€?/li> </ol> 在下面的部分ž®†è¯¦¾l†ä»‹¾lJXTA的各个组成部分ã€?br><img src ="http://www.aygfsteel.com/pandawang/aggbug/117108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/pandawang/" target="_blank">Long Long Ago</a> 2007-05-13 14:13 <a href="http://www.aygfsteel.com/pandawang/archive/2007/05/13/117108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JXTA学习(f¨¤n)½W”è®°åQ?åQ‰â€”—JXTA½Ž€ä»?/title><link>http://www.aygfsteel.com/pandawang/archive/2007/05/12/117072.html</link><dc:creator>Long Long Ago</dc:creator><author>Long Long Ago</author><pubDate>Sat, 12 May 2007 15:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/pandawang/archive/2007/05/12/117072.html</guid><wfw:comment>http://www.aygfsteel.com/pandawang/comments/117072.html</wfw:comment><comments>http://www.aygfsteel.com/pandawang/archive/2007/05/12/117072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/pandawang/comments/commentRss/117072.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/pandawang/services/trackbacks/117072.html</trackback:ping><description><![CDATA[    JXTAæ˜¯ä¸€ä¸ªäØ“(f¨´)P2P计算而开发设计的开发网路计½Ž—åã^台。它的目标是通过创徏基本¾l„äšg和服务来为peer group创造新的应用。JXTA是juxtpose的简¿UŽÍ¼ŒæŒ‡åÆˆåˆ—åÆˆæŽ’ï¼Œ˜q™é‡Œæ˜¯è¯´P2P的方式和C/S方式以及(qi¨¢ng)B/S方式是同½{‰åœ°ä½äº†(ji¨£n)åQŒéƒ½æ˜¯ä¼ ¾lŸçš„分布式计½Ž—模型ã€?nbsp;JXTA为开发应用程序提供了(ji¨£n)一¾l„开发协议集合和一个开放源码的参考实现。JXTA协议标准化了(ji¨£n)peer的风æ û|¼š(x¨¬) <ol> <li>互相发现åQ?/li> <li>在peer group中的自组¾l‡ï¼›</li> <li>òq¿å‘Šå’Œå‘现网¾lœæœåŠ¡ï¼›</li> <li>peer间的通讯åQ?/li> <li>peer间的交互ã€?/li> </ol>     JXTA协议被设计成独立于程序设计语­a€å’Œç‹¬ç«‹äºŽä¼ è¾“协议的。这些协议可以ä‹É用Java或者C/C++或者perlå®žçŽ°ã€‚åŒæ øP¼Œä¹Ÿèƒ½åœ¨TCP/IP,HTTP,Bluetooth或者其他传输协议上实现。JXTA协议使得开发者可以构建和部çÖvP2Pçš„æœåŠ¡æˆ–è€…åº”ç”¨ç¨‹åºï¼Œå› äØ“(f¨´)˜q™äº›åè®®æ˜¯ç‹¬ç«‹äºŽ½E‹åºè¯­è¨€å’Œä¼ è¾“协议,所以可以ä‹É得采用完全不同èÊY件体¾pȝš„异构¾lˆç«¯è®‘Ö¤‡èƒ½å¤Ÿäº¤äº’通讯。ä‹É用JXTA技术,开发äh员可以开发出åŸÞZºŽ¾|‘络的,能够交互的应用程序,˜q™äº›åº”用½E‹åºæœ‰å¦‚下特点:(x¨¬) <ol> <li>通过动态查询和防火墙穿­‘Šæ¥å‘现本网¾lœä¸­çš„å…¶ä»–peeråQ?/li> <li>ä»ÖM½•讉K—®¾|‘络的节炚wƒ½å¯ä»¥æ–¹ä¾¿åœ°å…±äº«æ–‡æ¡£ï¼›</li> <li>在网¾lœç«™ç‚¹ä¸­æŸ¥æ‰¾minute contentåQ?/li> <li>创徏一个peer group来提供服务;</li> <li>˜qœç«¯ç›‘视peer的行为;</li> <li>在网¾lœä¸­åŒå…¶ä»–peer˜q›è¡Œå®‰å…¨çš„通信ã€?/li> </ol><img src ="http://www.aygfsteel.com/pandawang/aggbug/117072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/pandawang/" target="_blank">Long Long Ago</a> 2007-05-12 23:59 <a href="http://www.aygfsteel.com/pandawang/archive/2007/05/12/117072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>erlangå’Œyawshttp://www.aygfsteel.com/pandawang/archive/2007/01/18/94774.htmlLong Long AgoLong Long AgoThu, 18 Jan 2007 15:22:00 GMThttp://www.aygfsteel.com/pandawang/archive/2007/01/18/94774.htmlhttp://www.aygfsteel.com/pandawang/comments/94774.htmlhttp://www.aygfsteel.com/pandawang/archive/2007/01/18/94774.html#Feedback2http://www.aygfsteel.com/pandawang/comments/commentRss/94774.htmlhttp://www.aygfsteel.com/pandawang/services/trackbacks/94774.htmlhttp://yarivsblog.com/articles/2006/07/12/the-hitchhiker
首先需要安装erlang环境åQŒwindowså’Œlinux下都有,但yaws好像只给äº?ji¨£n)个linux下的安装文äšgåQŒäºŽæ˜¯åœ¨ubuntu6.06上安装ã€?br />从erlang主页www.erlang.org上下载源码,¾~–译步骤åQ?br />tar -xzvf xxx.tar.gz
cd xxx
sudo ./configure
åQˆsudo make cleanåQ‰ï¼ƒå¯é€‰çš„åQŒç”¨äºŽéžé¦–次¾~–译的情å†?br />sudo make
sudo make install åQˆas rootåQ?br />但configure时出错:(x¨¬)åQˆç±»ä¼¼å¦‚下)(j¨ª)
configure: error: No curseslibraryfunctions found
There is a problem with $ERL_TOP/erts/configure not passing the LDFLAGS
environment variable for test compiles, so ALL library tests fail. I
modified files $ERL_TOP/erts/aclocal.m4 and $ERL_TOP/configure.in in order
to locate pthread_create in the standard C runtime library. The
$ERL_TOP/configure.in produces a configure that works, wheras the
$ERL_TOP/erts/configure.in does not. At the top of file erts/configure.in:

AC_PREREQ(2.13)
AC_INIT(vsn.mk)
应该是一些curses库没有安装,但apt-get install curses提示找不刎ͼŒgoogleäº?ji¨£n)一下发现需要安è£?br />
ncurses-devel包,在网上只扑ֈ°äº?ji¨£n)相应的rpm包,使用alien命ä×o(h¨´)åQŒå°†rpm保è{æ¢äØ“(f¨´)deb包安装:(x¨¬)
sudo apt-get install alien
sudo alien *.rpm,转成deb后,用dpkg -i *.deb
或�br />sudo alien -i *.rpm
˜q›è¡Œå®‰è£…
(注意åQŒä¸‹è½½rpm包的时候我ž®†åŒ…改名äº?ji¨£n)ï¼Œå¯ÆD‡´alien时出错,æ”ÒŽ(gu¨©)ˆåŽŸæ¥çš„åå­—å°±æ­£å¸¸äº?ji¨£n),不知道äØ?f¨´)什么:(x¨¬)P)
˜q™æ—¶å€™cofigure可以˜q‡åŽ»äº?ji¨£n),但make又出错了(ji¨£n)åQŒæ½Cºerlc找不刎ͼŒ¾cÖM¼¼å¦‚下的错误信息:(x¨¬)
erlc -W +debug_info -I../include -o../ebin otp_ring0.erl
make[4]: erlc: Command not found
make[4]: ***[../ebin/otp_ring0.beam]Error127
make[4]: Leaving directory `/usr/src/packages/erlang-10.b.5/lib/kernel/src'
make[3]: *** [/usr/src/packages/erlang-10.b.5/lib/kernel/ebin/otp_ring0.beam] Error 2
make[3]: Leaving directory `/usr/src/packages/erlang-10.b.5/erts/emulator'
make[2]: *** [generate] Error 2
make[2]: Leaving directory `/usr/src/packages/erlang-10.b.5/erts/emulator'
make[1]: *** [depend] Error 2
make[1]: Leaving directory `/usr/src/packages/erlang-10.b.5'
make: *** [build-stamp] Error 2
make: *** [debs] Error 2

看网上有介绍说ä‹É用make cleanòq¶ä¸å®Œå…¨åQ?br />于是ž®†æºç åˆ é™¤ï¼Œé‡æ–°è§£åŽ‹¾~©ï¼Œå†configure后,makeåQŒæ²¡æœ‰æ½Cºerlc找不åˆîCº†(ji¨£n)åQŒåˆæœ‰æ½Cºç±»ä¼¼å¦‚下的错误信息åQ?br />> otp_src_R11B-1/lib/kernel/ebin/erlang.beam > i686-pc-linux-gnu/preload.c
> m4 -DTARGET=i686-pc-linux-gnu -DOPSYS=linux -DARCH=x86 hipe/
> hipe_x86_asm.m4 > i686-pc-linux-gnu/opt/plain/hipe_x86_asm.h
> /bin/sh: m4: command not found
> make[2]: *** [i686-pc-linux-gnu/opt/plain/hipe_x86_asm.h] Error 127
> make[2]: Leaving directory `/home/jhancock/otp_src_R11B-1/erts/emulator'
> make[1]: *** [generate] Error 2
> make[1]: Leaving directory `/home/jhancock/otp_src_R11B-1/erts/emulator'
> make: *** [depend] Error 2
˜q™æ˜¯m4包没有找刎ͼˆhttp://www.erlang.org/pipermail/erlang-questions/2006-November/023942.htmlåQ?br />安装m4包后åQŒç‘ô¾l­make出现如下错误åQ?br />hipe/hipe_mkliterals.c:351: error: 'X86_LEAF_WORDS' undeclared here (not in a function)
hipe/hipe_mkliterals.c:352: error: 'X86_NR_ARG_REGS' undeclared here (not in a function)
¾|‘上搜烦(ch¨³)¾l“æžœåQšhttp://forum.trapexit.org/viewtopic.php?t=6815
ž®†æºç åˆ é™¤ï¼Œå†è§£åŽ‹ç¾ƒ 再make¾lˆäºŽ˜q‡åŽ»äº?/pre>提示åQšå¦‚下的包最好是在erlang安装之前ž®±å®‰è£…好çš? perl, debhelper (>= 4.0.0), autoconf (>= 2.50), openssl, libssl-dev, m4, libncurses5-dev, dpatch, autotools-dev, unixodbc-dev
make˜q‡ç¨‹å¤§æ¦‚æœ?个小æ—Óž¼Œä¹‹åŽæ˜¯make install很快ã€?br />打开¾lˆç«¯åQŒè¾“å…¥erlåQŒå‡ºçŽ°æ½Cºç¬¦1>
后面ž®†yaws的安装和使用
yaws的安装挺½Ž€å•çš„åQŒä¸»è¦æ˜¯ä»–çš„¾~–译是基于erlangçš„ã€?br />需要注意的是,安装好后åQŒå¦‚果没有安装相应的ssl模块的话åQŒéœ€è¦æ›´æ”¹ä¸€ä¸‹confæ–‡äšgåQŒå°†å…¶ä¸­å…³äºŽssl的部分注释掉åQŒæ—¢å¦‚下部分åQ?br /><server xxx>
      ....
          <ssl>
                ...
          </ssl>
</server>
在windows下的安装åQŒåœ¨yaws的主™åµä¸Šæœ‰è¯´æ˜Žï¼Œéœ€è¦ä¸‹è½½ä¸€ä¸ªbatæ–‡äšgåQŒä¸˜q‡è¿™ä¸ªæ–‡ä»¶å¥½åƒæœ‰é—®é¢˜åQŒéœ€è¦å°†ä¸€äº›å®‰è£…的环境变量改一下,在(SET ERLC_FLAGS=åQ‰è¿™è¡Œä¹‹åŽæ·»åŠ ï¼š(x¨¬)
SET ProgramFiles=G:\erlang\yaws\yaws_program
SET HOME=G:\erlang\yaws\yaws_data
SET APPDATA=G:\erlang\yaws\yaws_configure
ProgramFiles 为yaws的程序位¾|®ï¼ŒHOME为yaws的数据位¾|®ï¼ŒåŒ…括wwwåQŒlogåQŒwikiåQŒssl½{‰ï¼ŒAPPDATA为yaws的配¾|®ä½¾|®ã€?br />如果使用默认安装参数的话åQŒéœ€è¦å°†IF NOT DEFINED ProgramFiles SET ProgramFiles="c:\Program Files"å’?br />HOME="%HOMEDRIVE%%HOMEPATH%\My Documents"中的双引号去掉(感觉˜q™ä¸ªbatæ–‡äšg写的比较乱)(j¨ª)
同时不要忘了(ji¨£n)åQŒåœ¨å®‰è£…好之后注释掉confæ–‡äšg中关于ssl的部分ã€?br />安装好后åQŒé»˜è®¤å°±å¯ä»¥åœ?home/www目录或è€?tmpåQˆwindows䏋䨓(f¨´)%home%\www  or C:\tmpåQ‰ç›®å½•添加yawsæ–‡äšgåQˆehtmlåQ‰æ¥æ˜„¡¤ºäº?ji¨£n)ã€?br />btwåQšå¦‚果在ubuntu or debian上安装,最½Ž€å•,只要apt-get install yaws ž®±å¯ä»¥äº†(ji¨£n)。运行yaws需要root权限ã€?br />

]]> Ö÷Õ¾Ö©Öë³ØÄ£°å£º ¾¸Î÷ÏØ| ³à±ÚÊÐ| ×óÔÆÏØ| ÁÙÔóÏØ| פÂíµêÊÐ| òÔºÓÊÐ| ÜÆ½­| ÄÏÐÛÊÐ| ÇåºÓÏØ| »¯ÖÝÊÐ| °ÍÑåÄ×¶ûÊÐ| ±¾ÏªÊÐ| ºç¿ÚÇø| ²èÁêÏØ| ¡»ØÏØ| ²©°®ÏØ| ±±íÕÇø| ´ï×ÎÏØ| ÎàÖÝÊÐ| ËìÆ½ÏØ| ÀϺӿÚÊÐ| ÙñÖÝÊÐ| Õò½­ÊÐ| ϼÆÖÏØ| °àÂêÏØ| ·ÖÒËÏØ| ɽÎ÷Ê¡| ÐÅÒËÊÐ| ºÓ¶«Çø| ïÃûÊÐ| ÆÕ¶ý| ºéºþÊÐ| ×ÏÑôÏØ| ²ÔÏªÏØ| ´óÎòÏØ| ƽ¹ÈÇø| ¡»¯ÏØ| פÂíµêÊÐ| ¶«À¼ÏØ| ÎÞ¼«ÏØ| Þ»³ÇÊÐ|