2010-03-03 43 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 - 一次在条件中(并且丢失它),第二次在循环的主体。这可能是一个问题。 –

相关问题