2011-05-03 42 views
0
public void sendToServer(String fileToSend, String ip, int sendPort) 
{ 
    int port = sendPort; 
    String url = ip; 
    File file = new File(fileToSend); 
    String fileName = file.getName(); 

    Socket sock; 
    try { 
     sock = new Socket(url,port); 

     //Send the file name 
     OutputStream socketStream = sock.getOutputStream(); 
     ObjectOutput objectOutput = new ObjectOutputStream(socketStream); 
     objectOutput.writeObject(fileName); 

     //Send File 
     byte [] mybytearray = new byte [(int)file.length()]; 
     FileInputStream fis = new FileInputStream(file); 
     BufferedInputStream bis = new BufferedInputStream(fis); 
     bis.read(mybytearray,0,mybytearray.length); 
     OutputStream os = sock.getOutputStream(); 
     os.write(mybytearray,0,mybytearray.length); 
     fileSentOkay(); 
     os.flush(); 
     sock.close(); 

    } catch (UnknownHostException e) { 
     hostNotFound(); 
    } catch (IOException e) { 
     hostNotFound(); 
    } 
} 

當我嘗試送東西到服務器時,服務器沒有監聽連接,在手機不斷嘗試發送的文件。因此,我的Android程序將最終強制關閉。超時就發送到服務器套接字

我該如何設定這個發生的時間?我需要在發送數據的套接字上使用類似setSoTimeout()的東西嗎?

回答

0

第一:以防萬一:不要在UI線程上做網絡東西。 (tm)

第二:setSoTimeout()在服務器接受連接但沒有回覆(或者根本沒有網絡回覆的情況下)時應該給你一個超時。如果連接被拒絕,套接字應該會顯着更快地失敗。

編輯:如果Socket類的構造函數已經佔用了那麼長時間,請嘗試使用connect(SocketAddress, int)方法。使用InetSocketAddress作爲參數:

Socket s = new Socket(); 
s.connect(..., 1000); 
+0

我添加了sock.setSoTimeout(1000),但它似乎沒有影響任何東西。如果我試圖將文件發送到不存在的IP,它會在一段時間後強制關閉。 – 2011-05-03 19:16:51

+0

你能提供一個導致力量關閉的錯誤logcat嗎? – Stephan 2011-05-03 19:51:37

+0

嘿,我無法獲得格式化在這裏工作,所以我粘貼到鏈接logcat文件,然後強制關閉:http://pastebin.com/PGSGE3cd – 2011-05-03 20:33:25

相關問題