2013-02-06 39 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