最近在作文件傳輸,遇到只能發送文件到spark,spark發送文件來不能接收,要麼一直等待,要麼發一下就要重試,這天終於找到問題的所在了 個人openfire裏面的:服務器->服務器設置->文件傳輸設置 裏面的代理服務被禁用了,應該要使用裏面的「使用」 這是我同窗總結分析出來的傳輸文件的報文,因爲咱們兩個是一塊兒在作,我就不去抓了,爲了記筆記不得不發一下 發送文件場景: 1,對方拒接 2,對方贊成接受 2.1對方中途中斷接收 2.2我方中途中斷髮送 2.3發送成功 ------------------------------拒絕接受 A請求向B發送一個文件 <iq type='set' to='lxy2@user-20160421db/Spark' id='file_33fe4dbdf2364' xmlns='jabber:client'> <si xmlns='http://jabber.org/protocol/si' id='jsi_33fe4dbdf2313' profile='http://jabber.org/protocol/si/profile/file-transfer' mime-type='application/pdf'> <file xmlns='http://jabber.org/protocol/si/profile/file-transfer' name='File (2).pdf' size='457701'/> <feature xmlns='http://jabber.org/protocol/feature-neg'> <x xmlns='jabber:x:data' type='form'> <field var='stream-method' type='list-single'> <option> <value>http://jabber.org/protocol/ibb</value> </option> </field> </x> </feature> </si> </iq> B拒絕 <iq xmlns="jabber:client" id="file_33fe4dbdf2364" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" type="error"> <error code="406" type="MODIFY"> not-acceptable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/> </error> </iq> ------------------------------------贊成接受,並完成發送 A請求向B發送一個文件。包含一些文件的信息,以及發送文件所使用的stream-method,提供了option,可選項,這裏 實現了ibb方式,因此只提供這種方式。 <iq type='set' to='lxy2@user-20160421db/Spark' id='file_33fe66c647645' xmlns='jabber:client'> <si xmlns='http://jabber.org/protocol/si' id='jsi_33fe66c647209' profile='http://jabber.org/protocol/si/profile/file-transfer' mime-type='application/pdf'> <file xmlns='http://jabber.org/protocol/si/profile/file-transfer' name='File (1).pdf' size='1073243'/> <feature xmlns='http://jabber.org/protocol/feature-neg'> <x xmlns='jabber:x:data' type='form'> <field var='stream-method' type='list-single'> <option> <value>http://jabber.org/protocol/ibb</value> </option> </field> </x> </feature> </si> </iq> B贊成接收文件,同時也指明瞭使用ibb方式 <iq xmlns="jabber:client" id="file_33fe66c647645" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" type="result"> <si xmlns="http://jabber.org/protocol/si"> <feature xmlns="http://jabber.org/protocol/feature-neg"> <x xmlns="jabber:x:data" type="submit"> <field var="stream-method"> <value>http://jabber.org/protocol/ibb</value> </field> </x> </feature> </si> </iq> A發送一個open表示初始化了通道,並通知對方,每一塊的data大小爲4096(固然,這是指最大的,最後一塊可能沒有4096) <iq type='set' to='lxy2@user-20160421db/Spark' id='efd57f0e-ba5a-4cbe-b68b-d7e1353839c2:ibb' xmlns='jabber:client'> <open xmlns='http://jabber.org/protocol/ibb' stanza='iq' sid='jsi_33fe66c647209' block-size='4096'/> </iq> B回發一個result表示接受。 <iq xmlns="jabber:client" id="efd57f0e-ba5a-4cbe-b68b-d7e1353839c2:ibb" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" type="result"/> A接着將發送屢次的data,直至將數據發送完畢。注意:data中的seq是發送的第幾塊數據 <iq type='set' to='lxy2@user-20160421db/Spark' id='b8ef6e92-66c8-41f9-aa16-711d471b5b7a:ibb' xmlns='jabber:client'> <data xmlns='http://jabber.org/protocol/ibb' seq='0' sid='jsi_33fe66c647209'>數據在這裏</data> </iq> B回覆一個iq result表示收到上面的data。注意,只有收到B的這個回覆,A纔會發送下一個data。 <iq xmlns="jabber:client" id="b8ef6e92-66c8-41f9-aa16-711d471b5b7a:ibb" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" type="result"/> ...通過屢次發送,數據發送完成 A將會發送一個close告訴B,數據已經發送完畢了 <iq type='set' to='lxy2@user-20160421db/Spark' id='f113f9f8-619b-4446-8551-3e85d7bbd065:ibb' xmlns='jabber:client'> <close xmlns='http://jabber.org/protocol/ibb' sid='jsi_33fe66c647209'/> </iq> B回覆一個iq result表示知道了 <iq xmlns="jabber:client" id="f113f9f8-619b-4446-8551-3e85d7bbd065:ibb" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" type="result"/> ------------------------------------贊成接受,但A中斷髮送 前面代碼同樣的 A發送一個close強制中斷髮送 <iq type='set' to='lxy2@user-20160421db/Spark' id='25384610-3cb2-4b21-8017-cde4d33fed07:ibb' xmlns='jabber:client'> <close xmlns='http://jabber.org/protocol/ibb' sid='jsi_33fe9304c6907'/> </iq> B返回iq result確認 <iq xmlns="jabber:client" id="ff5767cb-7677-43e8-9e9c-ae7493ab7a04:ibb" to="lxy@user-20160421db/76xgw7w2r6" from="lxy2@user-20160421db/Spark" type="result"/> ------------------------------------贊成接受,但B中斷接收 前面代碼同樣 B發送來一個close強制中斷接收 <iq xmlns="jabber:client" id="pfVx0-912" to="lxy@user-20160421db/76xgw7w2r6" type="set" from="lxy2@user-20160421db/Spark"> <close xmlns="http://jabber.org/protocol/ibb" sid="jsi_33fe9702f3329"/> </iq> A確認收到並中止繼續發送 <iq type='result' to='lxy2@user-20160421db/Spark' id='pfVx0-912' xmlns='jabber:client'/>