Android время от времени отказывается от соединения при подключении к сокету сервера

Итак, у меня есть приложение, которое связывает устройства Android в одной локальной сети друг с другом. Они периодически разговаривают друг с другом, подключаясь к серверу, устанавливая соединение с серверным сокетом, обмениваясь данными и закрывая соединение (каждую минуту).

Почему-то первые пару попыток работает хорошо, а потом они каждый раз начинают возвращать отказ в подключении. Кто-нибудь может сказать мне, что может быть причиной?

Мой код очень прост:

server = new ServerSocket(0);
while(true) {
    Socket clientSocket = server.accept();
    Log.d(TAG, "Incoming connection");
    handleClient(clientSocket);
}

И при подключении:

    Socket s = new Socket(si.getInet4Addresses()[0], si.getPort());
    doStuff(s)

У меня есть следующие разрешения:

    <manifest>
      ....
      <uses-permission android:name="android.permission.INTERNET"/>
      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
      <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
      <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
      <uses-permission android:name="android.permission.WAKE_LOCK"/>
      <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
      <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
      <application
        <activity>
          ...
          <intent-filter>
            ...
          </intent-filter>
        </activity>
        <service .. />
        <receiver >
           ....
        </receiver>
      </application>
    </manifest>

О, и я должен упомянуть, что все это происходит в сервисе.


person siemanko    schedule 10.01.2013    source источник
comment
Вы закрываете сокеты в конце? Может быть, вы достигли максимально допустимого количества открытых сокетов? проверьте это: stackoverflow.com/questions/1073203/ и этот stackoverflow.com/questions/2185834/   -  person Adel Boutros    schedule 10.01.2013
comment
Да, в какой-то момент я надеялся, что это оно. Но затем я начал закрывать все сокеты, и мне все равно не повезло :( Я делаю это в блоке finally, поэтому я почти уверен, что они закрыты. Но только для проверки работоспособности есть ли способ проверить общее количество открытых сокетов?   -  person siemanko    schedule 10.01.2013
comment
@nivwusquorum проверьте мои изменения   -  person Adel Boutros    schedule 10.01.2013
comment
Я тщательно проверил свой поток кода, я уверен, что закрываю все открытые сокеты.   -  person siemanko    schedule 10.01.2013
comment
Могу я увидеть определение handleClient()?   -  person    schedule 10.01.2013