2012-01-11 108 views
1

我遇到了我的serverThreadProc()方法的問題。它在我運行它時拋出一個BindException。在try塊的前兩行中可能會遇到問題。不知道我在做錯什麼。BindException地址已經在使用

private void serverThreadProc() { 
    while (!this.stopRequested) { 
     Socket sessionSocket = null; 
     try { 
      serverSocket = new ServerSocket(serverPort); 
      sessionSocket = this.serverSocket.accept(); 
      InetAddress sourceAddress = sessionSocket.getInetAddress(); 
      Log.i(LOG_TAG, "Accepted new incoming connection ... " 
        + sourceAddress.toString()); 
      if (clientMap.containsKey(sourceAddress)) { 
       ClientProcessor legacyProcessor = clientMap 
         .get(sourceAddress); 
       legacyProcessor.shutdown(); 
      } 
      ClientProcessor processor = new ClientProcessor(sessionSocket); 
      processor.start(); 
      clientMap.put(sourceAddress, processor); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

public int start() { 
    try { 
     this.serverSocket = new ServerSocket(0); 
     this.serverPort = this.serverSocket.getLocalPort(); 
     Log.i(LOG_TAG, "Server " + serverName + " started at " 
       + this.serverSocket.getLocalSocketAddress()); 
    } catch (IOException ex) { 
     Log.i(LOG_TAG, ex.toString()); 
    } 

    this.serverThread.start(); 
    return this.serverPort; 
} 

public void stop() { 
    try { 
     stopRequested = true; 
     if (this.serverSocket) { 
      this.serverSocket.close(); 
     } 
    } catch (IOException ex) { 
     Log.i(LOG_TAG, ex.toString()); 
    } 

    Log.i(LOG_TAG, "The server " + this.serverName + " has been stopped."); 
} 

下面是由代碼生成的堆棧跟蹤:

01-11 05:51:53.472: I/ConnectActivity(2151): IP Address:0 
01-11 05:51:53.492: I/ServiceServer(2151): Server Whooznear started at /0.0.0.0:35434 
01-11 05:51:53.522: I/ConnectActivity(2151): Started at 35434 
01-11 05:51:53.542: W/System.err(2151): java.net.BindException: Address already in use 
01-11 05:51:53.542: W/System.err(2151):  at org.apache.harmony.luni.platform.OSNetworkSystem.bind(Native Method) 
01-11 05:51:53.542: W/System.err(2151):  at dalvik.system.BlockGuard$WrappedNetworkSystem.bind(BlockGuard.java:275) 
01-11 05:51:53.571: W/System.err(2151):  at org.apache.harmony.luni.net.PlainSocketImpl.bind(PlainSocketImpl.java:165) 
01-11 05:51:53.571: W/System.err(2151):  at java.net.ServerSocket.<init>(ServerSocket.java:123) 
01-11 05:51:53.592: W/System.err(2151):  at java.net.ServerSocket.<init>(ServerSocket.java:74) 
01-11 05:51:53.592: W/System.err(2151):  at com.whooznear.android.ServiceServer.serverThreadProc(ServiceServer.java:63) 
01-11 05:51:53.592: W/System.err(2151):  at com.whooznear.android.ServiceServer.access$0(ServiceServer.java:58) 
01-11 05:51:53.611: W/System.err(2151):  at com.whooznear.android.ServiceServer$1.run(ServiceServer.java:53) 
+0

Address alreay in use means that some other application is already using the port number。在運行應用程序之前關閉該應用程序,或者更改您的端口號。 POssibility是你自己的應用程序可能在後臺運行,你沒有注意到它。 – Acn 2012-01-11 07:38:04

+0

我對Andoid一無所知,但在「接受」之前,你需要一個'listen'。 – 2012-01-11 07:41:13

回答

1

創建的過程start()ServerSocket任務,然後創建在程序serverThreadProc()的相同端口上新增ServerSocket。在創建新的服務器套接字之前,您必須關閉舊的套接字。或者使用另一個端口。

相關問題