2013-02-06 38 views
3

我有一个Android上的TCP服务器的问题。服务器必须管理来自同一用户的多个传入连接。我收到以下错误:Android服务器套接字EADDRINUSE

02-06 17:37:44.800: W/System.err(9859): java.net.BindException: bind failed: EADDRINUSE (Address already in use) 
02-06 17:37:44.800: W/System.err(9859):  at libcore.io.IoBridge.bind(IoBridge.java:89) 
02-06 17:37:44.800: W/System.err(9859):  at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:150) 
02-06 17:37:44.800: W/System.err(9859):  at java.net.ServerSocket.bind(ServerSocket.java:318) 
02-06 17:37:44.800: W/System.err(9859):  at java.net.ServerSocket.bind(ServerSocket.java:281) 
02-06 17:37:44.800: W/System.err(9859):  at sample.services.TCPService$1.run(TCPService.java:84) 
02-06 17:37:44.804: W/System.err(9859): Caused by: libcore.io.ErrnoException: bind failed: EADDRINUSE (Address already in use) 
02-06 17:37:44.804: W/System.err(9859):  at libcore.io.Posix.bind(Native Method) 
02-06 17:37:44.804: W/System.err(9859):  at libcore.io.ForwardingOs.bind(ForwardingOs.java:39) 
02-06 17:37:44.804: W/System.err(9859):  at libcore.io.IoBridge.bind(IoBridge.java:87) 
02-06 17:37:44.804: W/System.err(9859):  ... 4 more 

我加setReuseAddress(true)但没有任何变化。我使用的代码如下。错误在哪里?谢谢

public void onStart(Intent intent, int startid) { 
    t = new Thread(){ 
     public void run() { 
      try { 
       Log.d("TCP", "Server: Creating server."); 
       ServerSocket ss = new ServerSocket(); 
       ss.setReuseAddress(true); 
       ss.bind(new InetSocketAddress(TCPPORT)); 
       while(true) { 
        //Server is waiting for client here, if needed 
        Log.d("TCP", "Server: Waiting on packet!"); 
        Socket s = ss.accept(); 
        BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); 
        String msg = input.readLine(); 
        ...... 
      } 
     } 
}; 
t.start(); 
} 

回答

3

我解决了!问题在于套接字必须在setReuseAddress()语句之后绑定。

+0

可以请你把你最后使用的代码。我做了同样的事,但没有工作。 – Sandeep

+0

没有任何变化 – AndroGeek