|
@@ -9,6 +9,7 @@ import java.io.InputStream;
|
|
|
import java.io.ObjectInputStream;
|
|
|
import java.io.ObjectOutputStream;
|
|
|
import java.io.OutputStream;
|
|
|
+import java.net.InetSocketAddress;
|
|
|
import java.net.ServerSocket;
|
|
|
import java.net.Socket;
|
|
|
|
|
@@ -27,11 +28,32 @@ import java.net.Socket;
|
|
|
*/
|
|
|
public abstract class WiFiP2pServerTask extends BackgroundTask {
|
|
|
|
|
|
-
|
|
|
+static int DEFAULT_TIMEOUT = 15;
|
|
|
private ServerSocket serverSocket;
|
|
|
|
|
|
private WifiP2pDevice ownDevice;
|
|
|
|
|
|
+ public int getTimeoutSeconds() {
|
|
|
+ return timeoutSeconds;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Set the time out seconds to
|
|
|
+ * -1 for infinity
|
|
|
+ * 0 for defaut 15 seconds
|
|
|
+ * 1 or more for other seconds
|
|
|
+ * @param timeoutSeconds the seconds to wait for an request before time ist out.
|
|
|
+ */
|
|
|
+ public void setTimeoutSeconds(int timeoutSeconds) {
|
|
|
+ if (timeoutSeconds == 0) {
|
|
|
+ this.timeoutSeconds = DEFAULT_TIMEOUT;
|
|
|
+ } else {
|
|
|
+ this.timeoutSeconds = timeoutSeconds;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private int timeoutSeconds;
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
public void interrupt(boolean b){
|
|
@@ -40,13 +62,14 @@ public abstract class WiFiP2pServerTask extends BackgroundTask {
|
|
|
try {
|
|
|
this.serverSocket.close();
|
|
|
} catch (IOException e) {
|
|
|
- Log.e("DEBUG_WiFiP2pServerTask", e.getMessage());
|
|
|
+ Log.e("DEBUG_WiFiP2pServerTask", "" + e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public WiFiP2pServerTask( WifiP2pDevice ownDevice, BackgroundTaskCompletionListener l){
|
|
|
super(l);
|
|
|
+ this.timeoutSeconds = DEFAULT_TIMEOUT;
|
|
|
this.ownDevice = ownDevice;
|
|
|
}
|
|
|
|
|
@@ -55,7 +78,10 @@ public abstract class WiFiP2pServerTask extends BackgroundTask {
|
|
|
while (!this.isInterrupted()){
|
|
|
try {
|
|
|
this.serverSocket = new ServerSocket(WiFiP2pClientTask.port());
|
|
|
+ //serverSocket.setReuseAddress(true);
|
|
|
+ //serverSocket.bind(new InetSocketAddress(WiFiP2pClientTask.port()));
|
|
|
Log.d("DEBUG_WiFiP2pServerTask", "Server: Socket opened");
|
|
|
+ this.serverSocket.setSoTimeout(this.getTimeoutSeconds() * 1000);
|
|
|
Socket client = this.serverSocket.accept();
|
|
|
Log.d("DEBUG_WiFiP2pServerTask", "Server: connection done");
|
|
|
|
|
@@ -67,11 +93,16 @@ public abstract class WiFiP2pServerTask extends BackgroundTask {
|
|
|
return true;
|
|
|
} catch (ClassNotFoundException e){
|
|
|
e.printStackTrace();
|
|
|
- Log.e("DEBUG_WiFiP2pServerTask", e.getMessage());
|
|
|
+ Log.e("DEBUG_WiFiP2pServerTask", "" + e.getMessage());
|
|
|
return false;
|
|
|
} catch (IOException e) {
|
|
|
+ try {
|
|
|
+ if (!this.serverSocket.isClosed()) this.serverSocket.close();
|
|
|
+ }catch (IOException ec){
|
|
|
+ Log.e("DEBUG_WiFiP2pServerTask", "Could not close server socket.");
|
|
|
+ }
|
|
|
e.printStackTrace();
|
|
|
- Log.e("DEBUG_WiFiP2pServerTask", e.getMessage());
|
|
|
+ Log.e("DEBUG_WiFiP2pServerTask", "" + e.getMessage());
|
|
|
return false;
|
|
|
}
|
|
|
}
|