Android中基於Socket方式的檔案上傳

2021-07-03 02:53:19 字數 1762 閱讀 1495

問題描述:

思考有可能出問題的點:

1. 因為是檔案上傳時,http協議中檔案長度的計算是否有誤

2. 因為使用的是socket方式,http請求完全要手工拼接,所以拼接http協議的部分是否有問題. 

3. android端能否呼叫到伺服器中的  servlet, 這是乙個關鍵點,如果能呼叫到,證明請求沒有問題. 如果呼叫不到,則證明android端的問題. 

解決思路:

1. 將androidu端的**最小化,只留下了上傳檔案乙個部分,其它的引數去掉.  

2. 仔細檢查協議的拼接部分,沒有問題. 

3. 在伺服器中設定了乙個斷點,斷點位置在servlet中的dopost方法的第一句話中,經過除錯跟蹤,發現客戶端能聯接上來,但隨著斷點向下執行,注意到  在以下紅色**處,沒有進行addop方法. 而我的請求位址寫的是:  

按道理應該進入   addop方法執行。  但觀察變數的值發現沒有op這個引數,即這個引數丟失了。   而我們知道,我是在位址列中通過get方式將這個op引數傳過來的,而沒有通過   post實體部分(如果是在實體中,則使用request無法直接獲取). ,應該可以獲取得到。 

if (op != 

null

&& !

"".equals(op))

} else

通過這個除錯,可以確定問題出在了客戶端, 為什麼會丟失引數呢?

4. 斷點除錯android客戶端**:

a.  呼叫部分ok   

wu.postfiletoserver(

"", null

, ufs);

b.   傳送請求頭的部分:

);請注意紅色**部分:   原本我是想獲取到如下的協議:  

但觀察變數得到的卻是:    

url.getpath()只獲取到了  請求的路徑,但並不會獲取到請求的引數部分。   所以在傳送post請求時,  op=add並沒有傳送. 伺服器端接收不到,所以沒有呼叫addop()方法. 

問題找到了,解決方案就出來了:

outputstream oos= socket.getoutputstream();

string querystring=url.getquery();   //取出請求引數.

解決問題還是須要心靜。 仔細觀察( 看來我還能坐得住).  

java 基於TCP UDP協議的Socket程式設計

基於tcp協議的socket程式設計 服務端 public class serverlogin 6.關閉輸入流 scoket.shutdowninput 7.向客戶端發訊息 info 歡迎您,登陸成功!os.write info.getbytes bufferedreader.close 8.關閉輸...

Android 開發 Socket 基於UDP通訊

服務端 1.建立乙個datagramsocket物件,並指定監聽的埠號 datagramsocket socket new datagramsocket 8000 2.建立乙個byte陣列用於接收 byte data new byte 1024 3.建立乙個空的datagrampackage物件 d...

基於Android的SDIO WIFI移植(1)

一 sdio 裝置驅動移植 很不巧核心已經 被 支援了,我就先不費這事了。二 配置核心以支援marvel無線wifi 在這裡我編譯成模組的方式 device drivers network device support wireless lan marvell 8 libertas wlan dri...