2012-10-14 77 views
3

好的,我正在做一些看起来应该很容易的事情。我基本上试图打开一个ServerSocket连接,然后等待客户端连接。如何在我的android应用程序中打开一个ServerSocket?

这是我的代码。

ServerSocket serverSocket = new ServerSocket(6543); 
Socket clientSocket = serverSocket.accept(); 

每当我的代码命中,serverSocket.accept();,我抛出以下异常。

bind failed: EADDRINUSE (Address already in use) 

所以很明显,我的下一步是检查,看看另一个端口是否会工作,它没有。接下来,我重新启动设备,并尝试运行应用程序,我得到了同样的例外。我已经给了我的应用程序INTERNET许可,并且该设备已根植。

这里是我的网络接口,显示出来。

lo: ::1%1 
lo: 127.0.0.1 
eth0: //IPV6 address 
eth0: 192.168.1.127 

编辑1

这里是ServerSocket对象信息进行调试时,我得到的。

ServerSocket[addr=192.168.1.121/192.168.1.121,port=0,localport=1234] 

EDIT 2

,我有以下可用的构造函数在我的ServerSocket

new ServerSocket(int port) 
new ServerSocket(int port, int backlog) 
new ServerSocket(int port, int backlog, InetAddress localAddress) 

我用3号构造和同样的异常尝试。

new ServerSocket(4567, 0, InetAddress.getLocalHost()); 
+0

对,让我知道它是怎么回事! –

+0

是的,我没有在那里的文件,也转身,并在手机和模拟器上测试了这一点,我收到了同样的例外。 – meanbunny

+0

如果你删除serverSocket.accept()是否有效? –

回答

1

好了,所以我终于想通了,为什么我的申请被抛出一个异常,如果任何人有这方面的一些意见或想提供一个答案,为什么这是怎么回事。我将不胜感激。

因此,在我创建的主题中,我需要回发到主线程来根据服务器连接发生的情况更新一些TextView。那么,因为我不能从我自己创建的线程更新主线程,我需要添加一个Handler对象到该线程以更新UI。删除该处理程序完全允许我的应用程序成功创建ServerSocket而不会引发异常。

处理程序是否以某种方式事先运行代码或在此处发生了什么?

代码。

RemoteServerRunnable test = new RemoteServerRunnable(); 
Handler handler = new Handler(); 
handler.post(test); 
test.start(); 
+0

再次对我+1:D 保重。 –

+0

谢谢,这是一个艰难的! – meanbunny

相关问题