2010-03-03 41 views
2

我在Android上有一個簡單的客戶端 - 服務器應用程序。 android服務通過tcp套接字與服務器通信。該服務發送一個簡單的字符串到服務器的工作。服務器處理該字符串並將對象發回給android服務。該對象實現了可序列化的接口。對象「離開」服務器成功,但在其中的Android服務接收對象的點(socket.readObject())我得到以下異常:Android,客戶端 - 服務器應用程序,不良套接字異常

java.net.SocketException異常:壞插座

我我從未見過這個。那是什麼意思?

編輯:

方法,其中異常被拋出:

private static void startContextListener(){ 
new Thread(){ 
    public void run(){ 
    try{ 
    while(contextsocket != null && !contextsocket.isClosed() && inContext.readObject() != null){ 
    kontext = (Kontext) inContext.readObject(); 
    } 
    } 
    catch(Exception e){ 
    Log.e(TAG, "startContextListener(): " + e.toString()); 
    } 
    } 
}.start(); 
} 

回答

2

這通常是read(2)無效socket描述符([EBADF] fildes is not a valid file or socket descriptor open for reading)的結果,所以它看起來是應用程序的某些層被關閉套接字。你能發佈更多的代碼來演示你如何使用socket?

+0

私有靜態無效startContextListener(){ \t \t新的Thread(){ \t \t \t公共無效的run(){ \t \t \t \t嘗試{ \t \t \t \t \t而(contextsocket!= NULL &&!contextsocket .isClosed()&& inContext.readObject()!= null){ \t \t \t \t \t \t kontext =(K ontext)inContext.readObject(); (標記,「startContextListener():」+ e.toString()); } } } .start(); } 這是拋出異常的方法 我在兩個不同的eclipse包中實現了這個應用程序和服務器應用程序。可序列化的類是相同的書面Java代碼,但它們是兩個不同的文件,每個項目中有一個文件。這是問題嗎? – user283494

+0

@moppel:編輯問題本身以添加代碼會更好。現在來看代碼 - 我沒有在你發佈的代碼片段中看到明確的套接字操作,但是看起來你試圖在每次循環迭代中讀取對象TWICE - 一次在條件中(並且丟失它),第二次在循環的主體。這可能是一個問題。 –

相關問題